当wordCount中不存在key时,我应该将++ wordCount [key]用于unordered_map <string,int>吗?

exp*_*ter 4 c++ unordered-map

见下面的代码:

unordered_map<string, int> wordCount;
for(string word: words)
    ++wordCount[word];
Run Code Online (Sandbox Code Playgroud)

题:

++wordCount[word];当wordCount中不存在word时,它是否适合使用?我总是看到有人这样使用,但我并不确定.

这里的解释说:

如果k与容器中任何元素的键不匹配,则该函数将使用该键插入一个新元素,并返回对其映射值的引用.请注意,即使没有为元素指定映射值(使用其默认构造函数构造元素),这也会将容器大小增加1.

我知道int默认是未初始化的.所以,我认为像这样直接增加地图价值是不安全的,是吗?

Ruf*_*ind 5

引用cppreference的文档 operator[]

使用默认分配器时,这会导致密钥是从密钥构造的,并且映射的值是值初始化的.

关键字是值初始化的.一个int是价值初始化为零.

这是官方参考(C++ 14,23.5.4.3第2段,[unord.map.elem]):

效果:如果unordered_map尚未包含其键等效的元素k,则第一个运算符将插入值value_type(k, mapped_type()),第二个运算符将插入该值value_type(std::move(k), mapped_type()).

注意mapped_type(),这mapped_type = int将构造一个零值int.