我想比较一组地址的当前和下一个元素。我尝试了以下代码
struct Address{
string state;
string city;
}
if((*it).state == (*(it+1)).state){
}
但编译器在“it + 1”中给出了与operator +不匹配的错误。在cplusplus.com我发现集合容器不支持+运算符。所以我无法找到在同一个if语句中访问集合的当前和下一个元素的方法。
答案 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()