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..)
setreturnsconst_iterators(the standard saysset<T>::iteratorisconst, and thatset<T>::const_iteratorandset<T>::iteratormay in fact be the same type – see 23.2.4/6 in n3000.pdf) because it is an ordered container. If it returned a regulariterator, 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.