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

should I use ++wordCount[key] for unordered_map<string, int> when key doesn't exist in wordCount?

本文关键字:使用 gt int string ++wordCount key wordCount lt 我应该 unordered map      更新时间:2023-10-16

请参阅下面的代码:

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

问题:

当wordCount中不存在单词时,它就在这里用于使用++wordCount[word];吗?我总是看到有人这样使用,但我真的不确定。

此处说明:

如果k与容器中任何元素的键都不匹配,则函数插入带有该键的新元素并返回引用到其映射值。请注意,这总是会增加容器即使没有为元素分配映射值(元素是使用其默认构造函数构造的)。

我知道int在默认情况下是未初始化的。所以,我认为这样直接增加地图值是不安全的,是吗?

operator[] 上引用cppreference的文档

当使用默认分配器时,这将导致从键复制构建键,并初始化映射值。

关键字是初始化的值。值初始化的int为零。

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

效果:如果unordered_map尚未包含键等效于k的元素,则第一个运算符插入值value_type(k, mapped_type()),第二个运算符插入值CCD_ 7。

注意mapped_type(),对于mapped_type = int,它将构造一个零值的int