我有一个名为count的结构,声称为count,其中包含两个内容,一个名为frequency的字符串和一个名为word的字符串。为了简化,我的程序将一本书作为文本文件,我计算每个单词出现的次数。我有一个结构数组,我有我的程序,每次出现一个单词时它将计算在哪里,现在我想要一个更快的方法来排序顶级频率的数组比我下面的方式。我使用了下面的冒泡排序算法,但是使用这种方法运行我的代码太长了。任何其他建议或帮助将是受欢迎的!我从算法库中查找了一下,但是我不明白我将如何在这里使用它。我是c ++的新手,所以很多关于如何使用sort的解释会有很多帮助。
void sortArray(struct count array[],int size)
{
int cur_pos = 0;
string the_word;
bool flag= true;
for(int i=0; i<(size); i++)
{
flag = false;
for(int j=0; j< (size); j++)
{
if((array[j+1].frequency)>(array[j].frequency))
{
cur_pos = array[j].frequency;
the_word = array[j].word;
array[j].frequency = array[j+1].frequency;
array[j].word = array[j+1].word;
array[j+1].frequency = cur_pos;
array[j+1].word = the_word;
flag = true;
}
}
}
};
答案 0 :(得分:1)
您只需要为结构定义较少的运算符, 并使用std :: sort,参见示例:
答案 1 :(得分:0)
为数据集创建一对后,可以使用std :: map作为容器并将对插入其中。如果你想根据频率定义std:map按如下方式排序
std :: map myMap; myMap.insert(标准:: make_pair(频率,单词));
std :: map在内部使用二叉树,因此您在检索时会得到一个已排序的数据。