c++ - 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,以防它不能为其他人编译。现在只要了解它是如何工作的就好了!!!
解决方案
您可以使用 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)); });
这不是一个任务单线,但它很干净。
推荐阅读
- javascript - 更改按钮的ID后如何执行第二个javascript函数?
- java - 为什么我的 Spring PropertySource 注释在编码属性上失败?
- go - 使用 Go Reflect 调用函数
- javascript - 未选中具有所需值的复选框
- c++ - Boost iterator_facade 实现
- javascript - 用猫鼬升级嵌套数组
- angularjs - 在哪里转义html?
- ios - swift - 如何从一个 tabBarItem 在两个视图控制器之间切换并自定义它?
- python - openpyxl - 将相同的工作表编译为新工作表
- go - 使用变量注入字符串模板