Изменить элемент итератором
У меня проблема, когда я хочу изменить элемент набора с помощью итератора.
Этот простой код может объяснить, что я хочу сделать.
set<int> s;
s.insert(12);
set<int>::iterator it = s.begin();
*it = 4; // error C3892: 'it' : you cannot assign to a variable that is const
Почему я не могу изменить значение, на которое указывает обычный итератор, а не const_iterator?
В моем итераторе кода возвращался set:: find(). Возможно, это лучший способ выбрать определенный элемент из набора и изменить его.
Ответы
Ответ 1
Набор - это упорядоченный контейнер (в частности, они реализованы как сбалансированные двоичные деревья поиска). Если бы вы смогли изменить значение элемента через итератор, инвариант порядка был бы сломан. В зависимости от того, чего вы пытаетесь достичь, вам может быть лучше с другим контейнером или получить значение, удалив элемент и вставив новый элемент в набор.