Bha*_*arg 3 c++ unordered-map emplace
以下是C++代码,用于计算杂志中的单词数.我试图添加单词,如果它的值不存在,如果它存在,增加它.
unordered_map<string,int>hash;
vector<string> magazine(m);
for(int i = 0;i <m;i++)
{
cin >> magazine[i];
if(hash[magazine[i]]>0)
hash[magazine[i]]++;
else
hash.emplace(magazine[i],1);
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试输出时,所有杂志键都将0作为值.知道为什么吗?
你的版本不起作用,因为这if(hash[magazine[i]]>0)将插入一个元素,hash如果它不存在,这个新元素的映射值为0¹.这意味着hash.emplace(magazine[i],1);在这里毫无意义,因为现在总会有一个元素magazine[i].因为它的价值将是0你的hash[magazine[i]]++;意志永远不会运行,因为if永远不会true.给你留下一个i有价值的元素图0.
operator[] 返回对映射值的引用(如果有),如果没有,则插入一个然后返回该引用¹.
这意味着您可以将其if分解并将其更改为:
for(int i = 0;i <m;i++)
{
cin >> magazine[i];
++hash[magazine[i]];
}
Run Code Online (Sandbox Code Playgroud)
这基本上意味着:" 获取对键的映射值的引用magazine[i],如果没有找到,请插入一个并给我一个.增加此引用. "
¹:如果发生插入,则元素被初始化.因为您的映射值类型int将导致插入后的映射值0.