1. ホーム
  2. c++

[解決済み] キーが存在しないmapの値を読み込むとどうなりますか?

2022-12-16 02:07:34

質問

map<string, string> dada;
dada["dummy"] = "papy";
cout << dada["pootoo"];

私はそれが未定義の動作と見なされるかどうかわからないので困惑しています。存在しないキーを要求したときにどのように知ることができますか、私は代わりに検索を使用するだけですか?

どのように解決するのですか?

この map::operator[] は、与えられたキーに対応する値をデータ構造から検索し、それへの参照を返します。

もし見つからない場合は、透過的にそのためのデフォルトの構成要素を作成します。 (この振る舞いを望まない場合は map::at 関数を使うことができます)。

std::mapのメソッドの完全なリストはこちらで得られます。

http://en.cppreference.com/w/cpp/container/map

以下は map::operator[] を現在のC++標準から引用しています。

23.4.4.3 マップ要素へのアクセス

T& operator[](const key_type& x);

  1. 効果 マップにxに相当するキーがない場合、value_type(x, T())をマップに挿入する。

  2. Requires: key_typeはCopyConstructibleでなければならず、 mapped_typeはDefaultConstructibleでなければならない。

  3. を返します。this の x に対応する mapped_type への参照。

  4. 複雑さ:対数的。

T& operator[](key_type&& x);

  1. 効果 xに相当するキーがマップにない場合、value_type(std::move(x), T())をマップに挿入する。

  2. Requires: mapped_typeはDefaultConstructibleでなければなりません。

  3. を返します。this の x に対応する mapped_type への参照。

  4. 複雑さ:対数的。