增加迭代器以指向另一个迭代器的下一个元素

时间:2018-01-27 23:06:09

标签: c++ iterator

我有两个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

2 个答案:

答案 0 :(得分:3)

无序地图iteratorsforward 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
    }
}