使用 hashmaps c++ 查找最常用的词

Find the most frequently word using hashmaps c++

我需要找到最常出现的单词和 return 该值。我必须使用散列映射,并且该函数需要一个文件名。这是我到目前为止所做的,但我很困惑。

  int most_frequent_word(string filename)
  {
  string words;
  ifstream in(filename.c_str());
  unordered_map<string, int> word_map;
  while(in >> words)
  {

    for(int i = 0; i < 100; i++)
    {
        word_map[words[i]]++;
    }
   }
  return words;
  }

如有任何帮助,我们将不胜感激。谢谢!

我也很疑惑!

for(int i = 0; i < 100; i++)
{
    word_map[words[i]]++;
}

你在这里做什么? 100从哪里来?为什么你关心单词的单个字母(words[i] 让你如此)?

如果我正确理解你的任务,难道还不够吗

++word_map[words];

代替?

还有你为什么returnwords?它是一个字符串,您的函数应该 return 和 int。相反,找到地图中的最大值即可。

您的代码中有几个问题可能会导致它无法按预期工作。

首先是 for i 循环。你为什么需要taht循环?就这样吧,你要数字数

while(in >> words)
{
    word_map[words]++;
}

words重命名为word,实际上你在这里读了一个字in >> words

第三个是return语句。当声明函数 returns int.

时,您不能 return string

但是 return 还没有什么,因为到目前为止我们只知道每个单词出现的次数。 运行 寻找最大值的循环。

int result = 0;
for(unordered_map<string, int>::iterator it = word_map.begin(); it != word_map.end(); it++)
    result = max(result, it->second);
return result;

此处 word_map 由成对的单词及其出现次数组成。我们需要遍历所有这些对以寻找最大出现次数。为此,我们使用迭代器 it.