C ++ map:首先调用map [a],如何将map [a] .second初始化为零?

时间:2015-05-16 07:40:55

标签: c++ dictionary stl

当我使用operator []来调用map[a];而地图中没有键a时,map[a]中的第二个元素会被初始化为零吗?如果没有,有什么好办法吗?我目前正在使用if (map.find(a)) map[a]++; else map[a] = 1;。我想使用初始化为0并仅调用map[a]++;map[a]--;

的地图

2 个答案:

答案 0 :(得分:2)

假设地图的类型为std::map<int, int> m,那么对不存在的密钥m[a]的{​​{1}}调用将插入一个包含密钥a和值的元素a,即int()。因此,您可以安全地将代码简化为

0

在一般情况下,新元素插入会将值初始化键对象插入到地图中。对于内置算术类型,例如std::map<int, int> m .... m[a]++; // OK ,值初始化意味着零初始化。

答案 1 :(得分:0)

假设std::map,如果operator[]创建了一个新元素(即对于以前不存在的密钥,则映射的值是初始值。

对于像int这样的基本类型,这意味着值为零。对于类/类类型,它表示默认构造。