一、獲取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<int, std::unique_ptr> 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容器中。在使用過程中,需要注意釋放內存。
原創文章,作者:JLDFJ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/334561.html