mapped_type& operator[](const key_type& x); // (1) C++23
mapped_type& operator[](key_type&& x); // (2) C++23
template <class K>
mapped_type& operator[](K&& x); // (3) C++23
概要
指定したキーを持つ要素を取得する。対応する要素が存在しない場合は生成して返す。
- (1) : 左辺値のキーを受け取る
- (2) : 一時オブジェクトのキーを受け取る
- (3) :
key_type
と比較可能なキーを受け取る
テンプレートパラメータ制約
- (3) :
key_compare::is_transparent
が妥当な式であること
戻り値
-
(1) : 以下と等価
return try_emplace(x).first->second;
-
(2) : 以下と等価
return try_emplace(std::move(x)).first->second;
-
(3) : 以下と等価
return try_emplace(std::forward(x)).first->second;
計算量
要素数に対して対数時間
備考
- (3) :
is_transparent
は、標準ライブラリのstd::less
、std::greater
といった関数オブジェクトの、void
に対する特殊化で定義される。それ以外のテンプレートパラメータでis_transparent
が定義されないのは、互換性のためである。- これらのオーバーロードは、
flat_map<string, int>
のようなコンテナに対し、検索操作で文字列リテラルを渡した際に、キー型の一時オブジェクトが生成されるコストを減らすためにある。
例
#include <iostream>
#include <flat_map>
int main()
{
std::flat_map<int, char> fm;
fm.insert(std::make_pair(1, 'a'));
// キー`1`に対応する要素を参照する
char& a = fm[1];
std::cout << a << std::endl;
// キー`2`に対応する要素を生成する
fm[2] = 'b';
}
出力
a
バージョン
言語
- C++23
処理系
- Clang: ??
- GCC: ??
- Visual C++: ??