一、获取map中所有的value
// 使用循环遍历获取所有value
std::map
my_map = {{1, "Hello"}, {2, "World"}};
std::vector
values;
for (auto& pair : my_map) {
values.push_back(pair.second);
}
使用循环遍历的方法可以获取map中所有的value,将pair.second插入到vector中即可。这种方法可以实现简单易懂,但是效率不高,需要循环遍历整个map。
二、使用transform函数获取所有的value
// 使用transform函数获取所有value
std::map
my_map = {{1, "Hello"}, {2, "World"}};
std::vector
values(my_map.size());
std::transform(my_map.begin(), my_map.end(), values.begin(),
[](const auto& pair){ return pair.second; });
使用transform函数可以更加简洁高效地获取map中所有的value,而无需手动遍历,提高了代码的可读性和性能。
三、使用boost库的transform_values函数获取所有的value
#include
// 使用boost库的transform_values函数获取value
std::map
my_map = {{1, "Hello"}, {2, "World"}};
std::vector
values = my_map | boost::adaptors::map_values;
使用boost库的transform_values函数可以更加简洁地获取map中所有的value,同时还能提高运行效率。
四、使用C++20中的std::ranges::views::values获取所有的value
#include
// 使用C++20中的std::ranges::views::values获取value
std::map
my_map = {{1, "Hello"}, {2, "World"}};
std::vector
values = my_map | std::ranges::views::values;
C++20中新增的std::ranges::views::values函数也可以方便获取所有的value,并且运行效率更高。需要注意的是,此函数需要使用包含ranges头文件的编译器。
五、使用boost库的indirect_iterator获取value
#include
// 使用boost库的indirect_iterator获取所有value
std::map
> my_map = {{1, std::make_unique
("Hello")},
{2, std::make_unique
("World")}};
std::vector
values; std::transform(boost::make_indirect_iterator(my_map.begin()), boost::make_indirect_iterator(my_map.end()), std::back_inserter(values), [](const auto& str_ptr){ return *str_ptr; });
如果map的value是指针类型,可以使用boost库的indirect_iterator获取所有value,并且将结果存储到vector容器中。在使用过程中,需要注意释放内存。