C++ 在标准映射元素上调用函数而不首先插入它

C++ 在标准映射元素上调用函数而不首先插入它,c++,map,std,C++,Map,Std,下面的代码可以吗 class A { public: A(); void foo(); }; map<int,A> m; m[0].foo(); A类 { 公众: A(); void foo(); }; 地图m; m[0].foo(); 或者我是否必须执行以下操作: map<int,A> m; m[0] = A(); m[0].foo(); map-m; m[0]=A(); m[0].foo(); 还有,我可以这样做吗: map<in

下面的代码可以吗

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

map<int,A> m;
m[0].foo();
A类
{
公众:
A();
void foo();
};
地图m;
m[0].foo();
或者我是否必须执行以下操作:

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

还有,我可以这样做吗:

map<int,A> m;
A a = m[5];
map-m;
A=m[5];
如何通过引用访问:

void foo(A & a);
map<int,A> m;
foo(m[5]);
void foo(A&A);
地图m;
foo(m[5]);

是的,它们都是有效的用法
operator[]
返回对键-值对的值的一半的引用,该值要么已经存在,要么是由
operator[]
本身在调用中插入的。

是的,它们都是有效用法
operator[]
返回对键-值对中已存在或由
operator[]
本身在调用中插入的值的一半的引用。

map::operator[]将动态创建一个新值,如果该值不存在。因此,您所有的代码示例都可以使用

也就是说,这个例子:

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

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

map::operator[]将动态创建一个新值,如果它不存在的话。因此,您所有的代码示例都可以使用

也就是说,这个例子:

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

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

当您使用std::map的“[]”运算符时,如果尚未存在具有指定ID的项,则将自动默认构造一个新对象。

当您使用std::map的“[]”运算符时,如果尚未存在具有指定ID的项,则默认情况下将自动构造新对象。

今天已经讨论过,今天已经讨论过