Warum nicht Schlüssel des assoziativen Containers ändern?

8

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?

    
Daniel Frey 29.03.2013, 10:05
quelle

1 Antwort

9

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üssel k1 und k2 werden für den Vergleich als äquivalent angesehen   Objekt comp , comp(k1, k2) == false && comp(k2, k1) == false . Für zwei beliebige Schlüssel k1 und k2 in der   selbe Container, ruft comp(k1, k2) immer den gleichen Wert zurück.

    
Andy Prowl 29.03.2013, 10:08
quelle

Tags und Links