存储段落并跟踪每个单词的出现次数

时间:2014-04-20 02:44:51

标签: c++

我想知道是否有人可以提出一种方法,我可以存储整段文字并保持每个单词的频率计数,然后按照最频繁到最不频繁的顺序对单词进行排序。我认为这可以使用二维数组来完成,也许是一个保持计数的结构,但我无法弄清楚这样做的确切方法。我目前正在使用DevC ++进行编码。

2 个答案:

答案 0 :(得分:0)

我建议使用将std::map映射到std::string的{​​{1}}。 int将是计数,int是关键。这将是构建计数列表的简单方法。从那里,你应该直截了当地获得最少的列表。您可以从地图条目中创建一对并将它们放在矢量中,然后只对计数中的矢量进行排序。可能有一些更好的方法可以在最后获得排序计数,但这是最初想到的。

答案 1 :(得分:0)

基本上,要计算单词频率,需要两个数据结构。

第一个是map(您可以使用std::map<std::string, int>,但如果可以使用C ++ 11,我会推荐std::unordered_map<std::string, int>。单词和计数每个单词的出现次数。

处理完所有单词后,您可以使用std::priority_queue<std::pair<std::string, int> >并将地图中的所有单词放入此队列中。使用自定义比较器来比较出现次数:

 typedef std::pair<std::string, int> Element;
 struct LessOccur {
     bool operator<(const Element& _lhs, const Element& _rhs) {
         return _lhs.second < _rhs.second;
     }
 };
 std::priority_queue<Element, std::vector<Element>, LessOccur> pq;
 for(auto it: wordMap)
     pq.push(*it);

那就是它。