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 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.
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 .
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.