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

时间:2016-03-19 22:19:19

标签: c++ hashmap find-occurrences

我需要找到最常出现的单词并返回该值。我必须使用哈希映射,功能将采用文件名。这是我到目前为止所做的,但我非常困惑。

  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;
  }

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

我也很困惑!

for(int i = 0; i < 100; i++)
{
    word_map[words[i]]++;
}
你在这做什么? 100来自哪里?你为什么要关心单词的单个字母(这是words[i]给你的)?

如果我理解你的任务,那就不够了

++word_map[words];

代替?

另外,为什么要返回words?它是一个字符串,你的函数应该返回和int。而是找到地图中最大的值,然后就完成了。

答案 1 :(得分:1)

您的代码中存在多个问题,可能导致其无法正常工作。

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

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

words重命名为word,实际上您在这里阅读一个单词in >> words

第三个是return语句。当声明函数返回string时,您无法返回int

然而,还没有什么可以回归,因为到目前为止我们只知道每个单词的出现次数。运行循环以查找最大值。

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