I know that it\'s a terrible idea to change the key of an object in an associative container, but I wonder where exactly the standard forbids me to do so. Consider:
This injects Undefined Behavior in your program if you modify the values in a way that the comparison of any two keys is different after the change according to the comparator you specified.
Per Paragraph 23.2.4/3 of the C++11 Standard ([associative.reqmts]):
The phrase “equivalence of keys” means the equivalence relation imposed by the comparison and not the
operator==
on keys. That is, two keysk1
andk2
are considered to be equivalent if for the comparison objectcomp
,comp(k1, k2) == false && comp(k2, k1) == false
. For any two keysk1
andk2
in the same container, callingcomp(k1, k2)
shall always return the same value.