Как вы уже узнали, оператор +
не поддерживается для 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)
Конечно, написание этой функции довольно тривиально, поэтому вы всегда можете написать свой собственный next
при кодированииpre C ++ 11.
Также: не забудьте убедиться, что следующий итератор не равен set.end()