C++ 我应该使用++;无序地图的字数[key]<;字符串,int>;当键不存在时';在wordCount中不存在吗?
见下面的代码:C++ 我应该使用++;无序地图的字数[key]<;字符串,int>;当键不存在时';在wordCount中不存在吗?,c++,unordered-map,C++,Unordered Map,见下面的代码: unordered_map<string, int> wordCount; for(string word: words) ++wordCount[word]; 无序映射字数; for(字符串字:字) ++字数; 问题: 在这里使用++wordCount[word]当wordCount中不存在单词时?我经常看到有人这样使用,但我不是很确定 解释说: 如果k与容器中任何元素的键不匹配,则 函数使用该键插入新元素并返回引用 到它的映射值。请注意,这始终会增加容
unordered_map<string, int> wordCount;
for(string word: words)
++wordCount[word];
无序映射字数;
for(字符串字:字)
++字数;
问题:
在这里使用++wordCount[word]代码>当wordCount中不存在单词时?我经常看到有人这样使用,但我不是很确定
解释说:
如果k与容器中任何元素的键不匹配,则
函数使用该键插入新元素并返回引用
到它的映射值。请注意,这始终会增加容器的容量
大小为1,即使没有为元素指定映射值(
元素是使用其默认构造函数构造的)
我知道这一点。所以,我认为像这样直接增加地图价值是不安全的,对吗?在
当使用默认分配器时,这将导致从键复制构造键,并初始化映射值
关键字是。初始化的int
值为零
下面是(C++14,23.5.4.3第2段,[unord.map.elem]):
效果:如果unordered_-map
尚未包含其键等效于k
的元素,则第一个运算符插入值value_-type(k,mapped_-type())
,第二个运算符插入
值值类型(std::move(k),mapped_type())
请注意mapped_type()
,它对于mapped_type=int
将构造一个零值int
我认为默认构造的int是0。。。e、 g.int()