Как изменить заданный элемент?

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

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

2 ответа

Решение

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

Элементы набора постоянны и не могут быть изменены на месте. Модификация может изменить предикат упорядочивания без изменения положения элемента, что нарушит ограничения структуры данных.

Однако сейчас в будущем (C++17) изменение элемента без стирания возможно с помощью extract функция-член:

std::set<std::string> stringset{"a", "b", "c"};
auto node = stringset.extract(stringset.begin());
std::string& str = node.value();
str = "d";
stringset.insert(std::move(node));

По-прежнему существует стоимость операций со списком, но сам объект не уничтожается и не копируется.

РЕДАКТИРОВАТЬ: Вы не можете добавить элемент в определенное место в наборе. набор должен быть в отсортированном порядке, какие бы операции вы ни делали. Таким образом, вы должны стереть определенный элемент и вставить новый элемент, чтобы упорядочение набора не было потеряно.

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

Другие вопросы по тегам