我想同时循环浏览两张地图,我怎么能实现这个呢?
我有两个想要打印的矢量,我可以在一个中做两次(auto it : mymap)
吗?类似的东西:
for (auto it: mymap && auto on: secondMap)
甚至允许这样做?
我正在尝试打印(value1, value2)
之类的值,其中每个值都在不同的地图中。地图不一定包含完全相同的项,但键是一个指令,值是一个整数,所以如果我在地图中有value2
的元素,那么不一定有value1
对应于相同的键,但在这种情况下,它应该是0,这是默认的整数值。
有什么想法吗?
也许可以组合两个迭代器,每个映射一个?
亲切的问候, Guus Leijsten
答案 0 :(得分:1)
您可以使用常规for循环:
#include <iostream>
#include <map>
int main(int argc, char* argv[]) {
std::map<int, std::string> m1, m2;
m1.insert({15, "lala"});
m1.insert({10, "hey!"});
m1.insert({99, "this"});
m2.insert({50, "foo"});
m2.insert({51, "bar"});
for(auto it_m1 = m1.cbegin(), end_m1 = m1.cend(),
it_m2 = m2.cbegin(), end_m2 = m2.cend();
it_m1 != end_m1 || it_m2 != end_m2;)
{
if(it_m1 != end_m1) {
std::cout << "m1: " << it_m1->first << " " << it_m1->second << " | ";
++it_m1;
}
if(it_m2 != end_m2) {
std::cout << "m2: " << it_m2->first << " " << it_m2->second << std::endl;
++it_m2;
}
}
return EXIT_SUCCESS;
}
请注意,因为要迭代不同大小的地图,所以必须在循环条件下使用||
运算符。直接后果是你不能在for循环的最后部分增加,因为其中一个迭代器在那时可能是无效的(并导致分段错误)。
你必须检查循环内的迭代器有效性,并在它有效时递增它,如上面的例子所示。