質問
次のコードは大丈夫ですか?
class A
{
public:
A();
void foo();
};
map<int,A> m;
m[0].foo();
または、以下を実行する必要があります:
map<int,A> m;
m[0] = A();
m[0].foo();
また、これを行うこともできます:
map<int,A> m;
A a = m[5];
そして参照によるアクセスはどうですか:
void foo(A & a);
map<int,A> m;
foo(m[5]);
解決
map :: operator []は、新しい値がまだ存在しない場合、その場で新しい値を作成します。したがって、すべてのコード例が機能します。
とはいえ、この例:
map<int,A> m;
m[0] = A(); // redundant
m[0].foo();
2行目は冗長なので過剰です。
他のヒント
はい、すべて有効な使用法です。 operator []
は、すでに存在するか、呼び出しで operator []
自体によって挿入されたキーと値のペアの値の半分への参照を返します。
std :: mapの「[]」演算子を使用すると、指定されたIDのアイテムがまだ存在しない場合、新しいオブジェクトが自動的にデフォルトで構築されます。
所属していません StackOverflow