比较A组的当前和下一个元素

时间:2012-01-07 23:23:37

标签: c++ iterator set

我想比较一组地址的当前和下一个元素。我尝试了以下代码

    struct Address{
          string state;
          string city;
    }

    if((*it).state == (*(it+1)).state){
    } 

但编译器在“it + 1”中给出了与operator +不匹配的错误。在cplusplus.com我发现集合容器不支持+运算符。所以我无法找到在同一个if语句中访问集合的当前和下一个元素的方法。

3 个答案:

答案 0 :(得分:1)

只需创建迭代器的副本,将其推进(++),然后进行比较。或者,如果您的标准库具有它,您可以使用next库中的c ++ 11 <iterator>函数。

if(it->state == std::next(it)->state)

答案 1 :(得分:1)

但是提供了++,所以你可以写:

?::iterator next = it;
next++;

答案 2 :(得分:0)

正如您已经发现+迭代器不支持运算符std::set,因为它们只是bidirectional iterators而不是random access iterators。因此,如果您想要与当前元素同时访问下一个元素,则必须复制并增加该元素:

std::set<Address>::iterator next_it = it;
++next_it;
if(it->state == (next_it)->state)

如果您使用的是c ++ 11,可以使用std::next中的<iterator>函数简化此代码(基本上可以做同样的事情):

if(it->state == std::next(it)->state)

当然,编写该函数非常简单,因此在编写C ++ 11之前,您总是可以编写自己的next

另外:请记住确保下一个迭代器不等于set.end()