在标准地图元素上调用函数而不先插入它

Igo*_*Oks 1 c++ std map

以下代码可以吗?

class A
{
  public:
    A();
    void foo();
};

map<int,A> m;
m[0].foo();
Run Code Online (Sandbox Code Playgroud)

或者我必须执行以下操作:

map<int,A> m;
m[0] = A();
m[0].foo();
Run Code Online (Sandbox Code Playgroud)

而且,我可以这样做:

map<int,A> m;
A a = m[5];
Run Code Online (Sandbox Code Playgroud)

如何通过引用访问:

void foo(A & a);
map<int,A> m;
foo(m[5]);
Run Code Online (Sandbox Code Playgroud)

R S*_*hko 5

map :: operator []如果它尚不存在,将动态创建一个新值.因此,您的所有代码示例都将起作用.

那说,这个例子:

 map<int,A> m;
 m[0] = A(); // redundant
 m[0].foo();
Run Code Online (Sandbox Code Playgroud)

因为第二条线是多余的,所以是过度的.