質問

次のコードは大丈夫ですか?

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のアイテムがまだ存在しない場合、新しいオブジェクトが自動的にデフォルトで構築されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top