1

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

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]);
4

3 に答える 3

5

map::operator [] は、まだ存在しない場合、その場で新しい値を作成します。したがって、すべてのコード例が機能します。

とはいえ、この例:

 map<int,A> m;
 m[0] = A(); // redundant
 m[0].foo();

2行目が冗長なのでやり過ぎです。

于 2009-10-28T20:33:17.123 に答える
1

はい、すべて有効な使用法です。operator[]キーと値のペアの値の半分への参照を返します。これは、既に存在しているかoperator[]、呼び出しでそれ自体によって挿入されました。

于 2009-10-28T20:33:17.160 に答える
0

std::map の '[]' 演算子を使用すると、指定された ID を持つアイテムがまだ存在しない場合、新しいオブジェクトが自動的にデフォルトで構築されます。

于 2009-10-28T20:35:20.973 に答える