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