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的项,则默认情况下将自动构造新对象。今天已经讨论过,今天已经讨论过