gpt4 book ai didi

c++ - 编辑给定键的无序映射中的值

转载 作者:太空狗 更新时间:2023-10-29 19:51:35 25 4
gpt4 key购买 nike

以下是计算杂志字数的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);
}

但是当我尝试输出时,所有杂志键的值都为 0。知道为什么吗?

最佳答案

您的版本不起作用,因为此 if(hash[magazine[i]]>0) 将在 hash 中插入一个元素(如果它不存在),这个新元素的映射值为 0¹。这意味着 hash.emplace(magazine[i],1); 在这里毫无意义,因为 总是magazine[i] 中的一个元素> 现在。因为它的值将是 0 你的 hash[magazine[i]]++; 也永远不会运行因为 if 永远不会是 。为您留下 i 元素的映射,所有元素的值为 0

operator[]如果存在映射值,则返回对映射值的引用;如果不存在,则插入一个,然后返回该引用¹。

这意味着您可以分解出 if 并将其更改为:

for(int i = 0;i <m;i++)
{
cin >> magazine[i];
++hash[magazine[i]];
}

这基本上意味着:“获取对键 magazine[i] 的映射值的引用,如果没有找到,插入一个并给我那个。增加这个引用。

¹: 如果发生插入,则元素被值初始化。因为您的映射值类型是 int,这将导致映射值在插入后为 0

关于c++ - 编辑给定键的无序映射中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40212572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com