I find the update operation on std::set
tedious since there's no such an API on cppreference. So what I currently do is something like this:
//find element in set by iterator Element copy = *iterator; ... // update member value on copy, varies Set.erase(iterator); Set.insert(copy);
Basically the iterator return by Set
is a const_iterator
and you can't change its value directly.
Is there a better way to do this? Or maybe I should override std::set
by creating my own (which I don't know exactly how it works..)
There are probably a few duplicates of that question but you can't replace an item in a set. You have to remove the old item and add the new item. It's not too hard. c++ provide basic functionalities which can be used to form several others like replace --> remove old + add new .
Modifications that do not break the sorting order are changes in those parts of the contained elements that do not contribute to the sorting order. The C++ Standard does not specify whether the iterator of a set container (type set<T>:: iterator) is a mutable or immutable iterator.
set
returns const_iterators
(the standard says set<T>::iterator
is const
, and that set<T>::const_iterator
and set<T>::iterator
may in fact be the same type - see 23.2.4/6 in n3000.pdf) because it is an ordered container. If it returned a regular iterator
, you'd be allowed to change the items value out from under the container, potentially altering the ordering.
Your solution is the idiomatic way to alter items in a set
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With