在C++中有没有一种方法可以构造一个有两个区域的Map?也就是说,不用调用默认的构造函数,然后在Map中插入元素:
for (size_t i = 0; i < Vector_1.size() && i < Vector_2.size(); i++) {
mymap[Vector_1[i]] = Vector_2[i];
}
我想通过调用某种构造函数来构建一个Map,该构造函数将两个范围作为参数,如下所示:
std::map<t1, t2> mymap(Vector_1.begin(), Vector_1.end(), Vector_2.begin(), Vector_2.end());
或者:
mymap.insert(Vector_1.begin(), Vector_1.end(), Vector_2.begin(), Vector_2.end());
我还没有找到,但也许还有一种方法可以做到这一点。有没有一种快捷方式可以从两个范围初始化Map,或者至少在Map中插入两个范围?
2条答案
按热度按时间p4tfgftt1#
您可以使用Eric Niebler的range-v3库,将两个向量压缩到一个视图中,然后将该视图写入Map。
Demo(https://godbolt.org/z/ejTbvGz99)
正如Armin Montigny所指出的,
std::ranges::views::zip
要到C++23才可用;同样的情况也发生在std::ranges::to
上。Here您可以看到一些编译器已经实现了std::ranges::views::zip
,但还没有实现std::ranges::to
。vaqhlq812#
创建自己的“快捷方式”是很简单的,它通常采用自由函数的形式。
P.S.我看到很多帖子引用了其他库(例如
boost
,range-v3
)或不支持的特性(例如zip_view
)。当然,我赞成重用高质量的库。不幸的是,许多项目根本无法使用它们(即受组织限制)。