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();

是多余的,因为第二行是多余的。

于 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 回答