假设我们有一个std :: map,声明为:
std::map<int, int> m;
然后,我们立即这样做:
m[0]++;
会发生什么?根据我的小实验,m [0]变为'1',就好像为'0'键存储了一个'0'。
但是,如果地图包含自定义类型会怎样?
std::map<E, T> m;
m[e].function();
这会有用吗?
其实我想知道C ++标准是如何指定的:)
答案 0 :(得分:3)
operator[]
重叠std::map
实际上 creates 作为参数传递的元素,所以通过m[0]++
插入{{1}在它上面做int
。 ++
对此功能的调用相当于:
1
答案 1 :(得分:1)
std::map
会引入&#34;空&#34;使用operator[]
访问条目时的元素。
如果您不希望有空元素,那么您需要使用std::map::find()
检查元素是否存在,如果不存在,请不要用它。
当然,只要你的T
类型被function()
调用就可以了,m[e].function()
就不会发生任何不好的事情。如果T
需要在调用function()
之前使用有用的东西进行初始化,那么您必须确保这不会发生。