c++ map:第一次调用map[a],如何初始化map[a].倒数第二

C++ map :first call to map[a], how to initialize map[a].second to zero?

本文关键字:map 初始化 倒数第二 第一次 c++ 调用      更新时间:2023-10-16

当我使用操作符[]调用map[a];时,在映射中没有键a, map[a]中的第二个元素将初始化为零吗?如果没有,有什么好的方法吗?我目前使用的是if (map.find(a)) map[a]++; else map[a] = 1;。我想使用一个初始化为0的映射,并且只调用map[a]++;map[a]--;

假设映射类型为std::map<int, int> m,那么对于不存在的键a调用m[a]将插入键为a,值为int()的元素,即0。因此,您可以安全地将代码简化为

std::map<int, int> m
....
m[a]++; // OK

在一般情况下,新元素插入将值初始化的键对象插入到映射中。对于内置算术类型,如int,值初始化意味着零初始化。

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

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