std :: Kartenunterschied zwischen Index- und Einfügeaufrufen

8

Was ist der Unterschied zwischen dem überladenen Indexoperator und dem Aufruf der insert-Methode für std :: map?

ie:

%Vor%

gegen

%Vor%     
TheOne 20.10.2009, 13:32
quelle

4 Antworten

19

Ich glaube, insert () wird einen vorhandenen Wert nicht überschreiben, und das Ergebnis der Operation kann überprüft werden, indem der bool-Wert im zurückgegebenen Iterator / Paar-Wert getestet wird

Die Zuweisung zum Subscript-Operator [] überschreibt einfach, was dort ist (Einfügen eines Eintrags, wenn dort noch keiner existiert)

Einer der Operatoren insert und [] kann Probleme verursachen, wenn Sie dieses Verhalten nicht erwarten und nicht berücksichtigen.

ZB mit Einfügen:

%Vor%

und mit [] operator:

%Vor%

Ich denke, dass diese korrekt sind, aber sie nicht kompiliert haben, so können Syntaxfehler

haben     
pxb 20.10.2009, 13:39
quelle
7

Bei einem map ersetzt der vorherige Ausdruck ( operator[] ) immer den Wert des Schlüssel-Wert-Paares durch den neuen gelieferten Wert. Ein neues Schlüssel / Wert-Paar wird eingefügt, falls noch kein Schlüssel / Wert-Paar vorhanden ist.

Im Gegensatz dazu fügt insert nur dann ein neues Schlüssel / Wert-Paar ein, wenn ein Schlüssel / Wert-Paar mit dem angegebenen Schlüsselteil nicht bereits in der Karte existiert.

    
Charles Bailey 20.10.2009 13:40
quelle
4

Zusätzlich zu der Tatsache, dass map::operator[] einen vorhandenen Wert ersetzt, ist das operator[] map :: wird erstellen und zur Karte hinzufügen einen vorhandenen Standardwert ersetzen, bevor die Ersetzung stattfindet ( Der Aufruf map::operator[]() muss einen Verweis auf etwas zurückgeben). Bei Artikeln, deren Erstellung teuer ist, könnte dies ein Leistungsproblem darstellen.

Siehe "Punkt 24: Wählen Sie sorgfältig zwischen map::operator[] und map::insert , wenn die Effizienz wichtig ist" in Scott Meyers 'Effective STL .

    
Michael Burr 20.10.2009 15:30
quelle
0

Die Einfügemethode wird in die Map eingefügt, während der überladene Indexoperator das Element mit dem Schlüssel key_value zurückgibt, wenn es sich in der Map befindet. Wenn es nicht bereits in der Map vorhanden ist, wird es eingefügt.

    
Brandon Haugen 20.10.2009 13:38
quelle

Tags und Links