Ich weiß, dass es eine schreckliche Idee ist, den Schlüssel eines Objekts in einem assoziativen Container zu ändern, aber ich frage mich, wo genau der Standard dies verbietet. Überlegen Sie:
%Vor%Ich gehe davon aus, dass das obige illegal sein sollte, aber ich habe den Standard schon seit einiger Zeit gelesen und kann nichts finden, was es illegal macht. Wo ist es? Oder versteckt es sich in einem zukünftigen Fehlerbericht?
Dies führt zu nicht definiertem Verhalten in Ihrem Programm, wenn Sie die Werte so ändern, dass der Vergleich zweier beliebiger Schlüssel nach der Änderung gemäß dem von Ihnen angegebenen Komparator unterschiedlich ist.
Nach Paragraph 23.2.4 / 3 des C ++ 11 Standards ([associative.reqmts]):
Der Ausdruck "Äquivalenz der Schlüssel" bedeutet die durch den Vergleich auferlegte Äquivalenzbeziehung und nicht die
operator==
auf Schlüsseln. Das heißt, die zwei Schlüsselk1
undk2
werden für den Vergleich als äquivalent angesehen Objektcomp
,comp(k1, k2) == false && comp(k2, k1) == false
. Für zwei beliebige Schlüsselk1
undk2
in der selbe Container, ruftcomp(k1, k2)
immer den gleichen Wert zurück.
Tags und Links c++ c++11 language-lawyer std