下面的代码可以吗?
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();
是多余的,因为第二行是多余的。
是的,它们都是有效的用法。operator[]
返回对键值对的一半值的引用,该键值对已经存在或operator[]
在调用中由自身插入。
当您使用 std::map 的 '[]' 运算符时,如果尚不存在具有指定 ID 的项目,则将自动默认构造一个新对象。