插入的最有效数据结构,然后使用不同的条件进行排序

时间:2016-05-08 09:12:24

标签: c++ sorting vector insert

我想知道什么是最好的数据结构,用于从文本中读取不同的单词并进行频率表,按照减少的出现次数排序。

我的想法是使用结构:

struct info {
    string word;
    int num;
};

考虑到这一点,我想知道我应该使用什么:vector,set,list ......? 我有两个带vector的实现:

1)让矢量未排序并对字进行线性搜索,如果字不在矢量,我在末尾添加元素。我读完了这个词,我通过降低频率对矢量进行了排序。

2)对矢量进行排序并使用双向搜索,将元素添加到其对应的位置,或者如果是,则将数字加1。然后我通过降低频率对矢量进行排序。

您如何看待,这种运动的最佳方式是什么?

2 个答案:

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