见下面的代码:
unordered_map<string, int> wordCount;
for(string word: words)
++wordCount[word];
问题:
在wordCount中不存在单词时,是否正确使用++wordCount[word];
?我总是看到有人这样使用,但我不太确定。
解释here说:
如果k与容器中任何元素的键不匹配,则 function使用该键插入一个新元素并返回一个引用 到它的映射值。请注意,这总是会增加容器 即使没有为元素分配映射值,也将大小加1 element是使用其默认构造函数构造的。
我知道int is uninitialized in default。所以,我认为像这样直接增加地图价值是不安全的,是吗?
答案 0 :(得分:5)
当使用默认分配器时,这会导致密钥是从密钥构造的,并且映射的值是值初始化的。
关键字为 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
。