マップの参照解除operator[]
がconst
ではないことがわかっており、マップを変更できます。しかし、私はオペレータが右側にいるときに何が起こるのだろうと思っていました。例えば:a
以来STL std :: mapオペレータ[]割り当ての右側にある場合
std::map<int, int> a;
int b = a[0];
は、これがキー0
とマップに新しいエントリを作成します0
エントリを持っていないのだろうか? operator[]
に関して
マップの参照解除operator[]
がconst
ではないことがわかっており、マップを変更できます。しかし、私はオペレータが右側にいるときに何が起こるのだろうと思っていました。例えば:a
以来STL std :: mapオペレータ[]割り当ての右側にある場合
std::map<int, int> a;
int b = a[0];
は、これがキー0
とマップに新しいエントリを作成します0
エントリを持っていないのだろうか? operator[]
に関して
:
は、そのようなキーが既に存在しない場合を挿入を行う、キーにキー同等にマッピングされた値への参照を返します。
hereから、強調する鉱山。
これはテストするのも簡単です。
std::map<int, int> a;
std::cout << a.size(); //0
int b = a[0];
std::cout << a.size(); //1
はい、マップはあなたのケースでは、キー0と値0を持つ新しいエントリを作成します。以下
http://www.cplusplus.com/reference/map/map/operator[]/
mapped_type &オペレータ[](CONST key_type & K)の[]動作について説明します。
kがコンテナ内の要素のキーと一致する場合、関数 は、マップされた値への参照を返します。 kが のキーと一致しない場合は、 というキーを持つ新しい要素を挿入し、マップされた値への参照を返します。
そして、人々がオペレーターを忘れた場合、[]は地図に存在しないときに新しいキーと値のペアを挿入することがあります。例えば、以下は、経時的な間違いです。
std::map<int,int> my_map;
//check if 100 is in my_map
if (my_map[100]) {
//some code
}
私はちょうど100がmy_map中かではなく、コードの上my_mapで新しいキー値を挿入するかどうかを確認したいです。この場合、私はちょうど100をチェックしたいならば、演算子[]の代わりにfindを使うべきです。
std::map<int,int> my_map;
//check if 100 is in my_map
if (my_map.find(100) != my_map.end()) {
//some code
}
はいそうでしょう。それはすべてドキュメントにあります。 –
部分式 'a [0]'は、代入の右辺にあることを知らない。それは、それが左側にあるときと同じことをするか、または他の表現の一部として行う。 –