Как изменить заданный элемент?
Я хочу изменить элемент в 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));
По-прежнему существует стоимость операций со списком, но сам объект не уничтожается и не копируется.
РЕДАКТИРОВАТЬ: Вы не можете добавить элемент в определенное место в наборе. набор должен быть в отсортированном порядке, какие бы операции вы ни делали. Таким образом, вы должны стереть определенный элемент и вставить новый элемент, чтобы упорядочение набора не было потеряно.
Также читайте больше о наборе!