我有两个unordered_maps
,我希望使用两个循环来迭代它们的内容。传统上,使用普通for循环迭代向量vec
,我会像下面这样做:
for(int i=0; i<vec.size(); i++)
for(int j=i+1; j<vec.size(); j++)
unordered_maps
代码如下:
unordered_map<int, int> m;
unordered_map<int, int>::iterator it1=m.begin();
unordered_map<int, int>::iterator it2=m.begin();
while(it1!=m.end()) {
it2=it1+1; //this is incorrect.
while(it2!=m.end()) {
//Do something
}
}
我应该如何正确初始化it2
,使其指向it1
当前指向的元素旁边的元素?
感谢。 d(^_^)b
答案 0 :(得分:3)
无序地图iterators为forward iterators,但不支持operator+
。相反,请使用std::next函数:
it2 = std::next(it1);
或者,使用std::advance功能:
it2 = it1;
std::advance(it2, 1);
或简单的增量运算符:
it2 = it1;
++it2;
答案 1 :(得分:1)
另一种选择是:
while (it1 != std::end(m)) {
it2 = it1;
while(++it2 != std::end(m)) {
//Do something
}
}