当我使用operator []来调用map[a];
而地图中没有键a时,map[a]
中的第二个元素会被初始化为零吗?如果没有,有什么好办法吗?我目前正在使用if (map.find(a)) map[a]++; else map[a] = 1;
。我想使用初始化为0并仅调用map[a]++;
和map[a]--;
答案 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
这样的基本类型,这意味着值为零。对于类/类类型,它表示默认构造。