我想知道什么是最好的数据结构,用于从文本中读取不同的单词并进行频率表,按照减少的出现次数排序。
我的想法是使用结构:
struct info {
string word;
int num;
};
考虑到这一点,我想知道我应该使用什么:vector,set,list ......? 我有两个带vector的实现:
1)让矢量未排序并对字进行线性搜索,如果字不在矢量,我在末尾添加元素。我读完了这个词,我通过降低频率对矢量进行了排序。
2)对矢量进行排序并使用双向搜索,将元素添加到其对应的位置,或者如果是,则将数字加1。然后我通过降低频率对矢量进行排序。
您如何看待,这种运动的最佳方式是什么?
答案 0 :(得分:1)
chargeService
答案 1 :(得分:1)
如评论中所述(抱歉,输入信用额度太难),您可以使用std::map
。对地图元素进行排序,您可以节省“手动”执行此操作所需的额外工作。如果您需要两种不同的排序方式,可以使用两个映射或一些其他容器并对其进行两次排序。例如。用向量:
#include <string>
#include <vector>
#include <algorithm>
struct info {
std::string word;
int num;
};
bool sortViaNum(const info& a,const info& b) { return a.num > b.num; }
bool sortViaWord(const info& a,const info& b) { return a.word > b.word; }
int main() {
std::vector<info> vect;
// fill the vector
std::sort(vect.begin(),vect.end(),sortViaNum);
std::sort(vect.begin(),vect.end(),sortViaWord);
return 0;
}