【问题标题】:Find the most frequently word using hashmaps c++使用hashmaps c ++查找最常用的单词
【发布时间】:2016-03-19 22:19:19
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ hashmap find-occurrences


    【解决方案1】:

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

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

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

    words重命名为word,其实你这里读的是一个字in &gt;&gt; words

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

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

    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

    【讨论】:

    • 你能解释一下吗?我真的不明白。
    • @Jean Alexander,你是在说找到最大值吗?
    • 是的,我是 xD,我不明白 map.get 或 map.end 那是什么?
    • @Jean Alexander,有一些迭代器允许您迭代数据结构中的项目。它看起来非常类似于使用变量 i 进行的常规 for 循环迭代。但是,要访问指向的值迭代器,我们应该使用 -&gt;* 运算符取消引用它。在这种情况下迭代器指向一个pair&lt;string, int&gt;,我们对第二部分感兴趣。因此it-&gt;second 是当前字数计数器。
    【解决方案2】:

    我也很困惑!

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

    你在这里做什么? 100从哪里来?你为什么要关心单词的单个字母(这就是words[i] 给你的)?

    如果我正确理解了你的任务,这还不够

    ++word_map[words];
    

    改为?

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

    【讨论】:

    • 对不起,我对这个哈希映射很困惑,我刚刚写了 100 作为随机值 xD
    • @JeanAlexander 这在编程时很少是成功的策略:-P
    猜你喜欢
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多