如果在std :: map中操作不存在的键值对会发生什么?

时间:2014-03-27 23:24:19

标签: c++

假设我们有一个std :: map,声明为:

std::map<int, int> m;

然后,我们立即这样做:

m[0]++;

会发生什么?根据我的小实验,m [0]变为'1',就好像为'0'键存储了一个'0'。

但是,如果地图包含自定义类型会怎样?

std::map<E, T> m;
m[e].function();

这会有用吗?

其实我想知道C ++标准是如何指定的:)

2 个答案:

答案 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()之前使用有用的东西进行初始化,那么您必须确保这不会发生。