Wenn der Operator [] keinen Wert für den angegebenen Schlüssel findet, fügt er an dieser Position einen ein.
Aber Sie sollten beachten , dass , wenn Sie einen Besuch not exist key
und rufen Sie es der Member - Funktion, wie mapKV [not_exist_key] .member_fun (). Das Programm abstürzen.
Lassen Sie mich ein Beispiel geben, Testklasse wie folgt:
struct MapValue{
int val;
MapValue(int i=0){
cout<<"ctor: "<<i<<endl; val = i;
}
~MapValue(){
cout<<"dtor: "<<val<<endl;
}
friend ostream& operator<<(std::ostream& out, const MapValue& mv){
cout<<"MapValue: "<<mv.val<<endl;
}
string toString(){
cout<<"MapValue: "<<val<<endl;
}
};
Testcode:
cout<<"-------create map<int, MapValue>-------"<<endl;
map<int, MapValue> idName{{1, MapValue(1)}, {2, MapValue(2)}};
cout<<"-----cout key[2]-----"<<endl;
cout<<idName[2]<<endl;
cout<<"-----cout key[5]-----"<<endl;
cout<<idName[5]<<endl;
cout<<"------- runs here means, does't crash-------"<<endl;
Ausgabe wie folgt:
-------create map<int, MapValue>-------
ctor: 1
ctor: 2
dtor: 2
dtor: 1
dtor: 2
dtor: 1
-----cout key[2]-----
MapValue: 2
-----cout key[5]-----
ctor: 0
MapValue: 0
-------runs here means, does't crash-------
dtor: 0
dtor: 2
dtor: 1
Wir können das sehen: Rufen Sie idName[5]
das Kartenkonstrukt {5, MapValue(0)}
auf, um es in idName einzufügen.
Wenn Sie jedoch die Mitgliedsfunktion von aufrufen idName[5]
, stürzt das Programm ab:
cout<<"-------create map<int, MapValue>-------"<<endl;
map<int, MapValue> idName{{1, MapValue(1)}, {2, MapValue(2)}};
idName[5].toString();
cout<<"------- runs here means, doesn't crash-------"<<endl;