2012-03-07 7 views
6

Я хочу изменить элемент в set, поэтому я использовал set<T>::iterator. Однако компилятор утверждает, что «элемент const». Тогда я понял, что set<T>::iterator является const_iterator ...Как изменить элемент набора?

Итак, как я могу изменить элемент? Удалите его, а затем вставьте новый?

ответ

20

Элементы set будут в отсортированном виде. Если вам разрешено изменять элемент, этот порядок сортировки не может быть сохранен. Следовательно, вы не можете изменить элемент. Вам нужно стереть существующий элемент и вставить новый.

+5

Следует отметить, что некоторые изменения элемента не влияют на его сортировку. Если вы хотите внести изменения, которые, как вы уверены, не повлияют на порядок сортировки, всегда существует 'const_cast' в качестве последнего средства. Рискованный и не красивый, но тем не менее. – jogojapan

+0

спасибо.Я знаю это. Так это единственный способ изменить элемент? –

+2

Поскольку 'erase' не выбрасывает, если код пользователя не вызывает броски, вероятно, лучше вставить новый элемент, а затем стереть старый. Это дает вам шанс на сильную гарантию исключения. –

0

EDIT: вы не можете добавить элемент в определенное место в наборе. набор должен быть в отсортированном порядке, какие операции вы выполняете. Таким образом, вам нужно удалить конкретный элемент и вставить новый элемент, чтобы порядок набора не был потерян.

Также читайте больше о set!