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

时间:2016-03-31 02:28:27

标签: c++ unordered-map

见下面的代码:

unordered_map<string, int> wordCount;
for(string word: words)
    ++wordCount[word];

问题:

在wordCount中不存在单词时,是否正确使用++wordCount[word];?我总是看到有人这样使用,但我不太确定。

解释here说:

  

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

我知道int is uninitialized in default。所以,我认为像这样直接增加地图价值是不安全的,是吗?

1 个答案:

答案 0 :(得分:5)

operator[]

上引用cppreference的文档
  

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

关键字为 value-initialized event.preventDefault()值已初始化为零。

这里是official reference(C ++ 14,13.5.4.3第2段,[unord.map.elem]):

  

效果:如果int尚未包含其键等效于unordered_map的元素,则第一个运算符会插入值k,第二个运算符操作员插入   价值value_type(k, mapped_type())

注意value_type(std::move(k), mapped_type()) mapped_type()mapped_type = int将构建零值int