首页 > 解决方案 > C++ 范围如何创建 std::map

问题描述

c++ 范围库中是否有创建地图的方法。假设我有一个整数范围,我想用伪代码创建一个 std::map 与每个整数的平方

vect<int> x { 1, 3, 5, 10 }

map<int,int> y = // magic happens here using x

y == std::map<int,int> { { 1, 1 }, { 3, 9 }, { 5, 25 }, { 10, 100 } };

对于那些 C# LINQ 用户,我正在寻找一个等同于 ToDictionary

带外有人提出以下建议

vector<int> x { 1, 3, 5, 10 };
auto const squares = 
    ranges::views::zip( x, x | ranges::views::transform( []( int i ) { return i * i; } ) ) | 
    ranges::to<std::map<int,int>>( );

这真是太棒了。注意我正在通过 VCPKG 使用 VS 2019 16.5 Preview 2 和 Range V3 0.9.1,以防它不能为其他人编译。现在只要了解它是如何工作的就好了!!!

标签: c++

解决方案


您可以使用 std::transform

std::vector<int> myVec{ 1, 3, 5, 10 };
std::map<int, int> myMap;
std::transform(myVec.begin(), myVec.end(), std::inserter(myMap, myMap.end()),
    [](const int &val) { return std::make_pair(val, pow(val,2)); });

这不是一个任务单线,但它很干净。


推荐阅读