在map <string,int>中,是否可以保证int被初始化为零?

Joh*_*ang 7 c++ stdmap

例如,计算书中单词的出现次数,我看到有人简单地写道:

map<string, int> count;
string s;
while (cin >> s) count[s]++;
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?我在我的机器上测试过,看起来如此.但保证初始化为零吗?如果不是,我会想象这样的代码:

map<string, int> count;
string s;
while (cin >> s)
    if (count.find(s) != count.end())  count[s]++;
    else count[s] = 1;
Run Code Online (Sandbox Code Playgroud)

R. *_*des 12

是的,operator[]std::map遗嘱初始化值T(),在这种情况下int,为零.

这在C++标准的第23.4.4.3节中有记录:

T& operator[](const key_type& x);
Run Code Online (Sandbox Code Playgroud)

效果:如果x地图中没有等效的键,则插入 value_type(x, T())到地图中.