【发布时间】:2015-01-28 23:48:36
【问题描述】:
我有一个名为 count 的结构声明为 count ,其中包含两个内容,一个称为频率的 int 和一个称为 word 的字符串。为简化起见,我的程序将一本书作为文本文件接收,并计算每个单词出现的次数。我有一个结构数组,我有我的程序,每次出现一个单词时它都会计数,现在我想要一种更快的方法来按最高频率对数组进行排序,而不是下面的方法。我使用了下面的冒泡排序算法,但是使用这种方法运行我的代码太长了。欢迎任何其他建议或帮助!我从算法库中查找了排序,但不明白我将如何在这里使用它。我是 C++ 新手,所以很多关于如何使用排序的解释会有很大帮助。
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;
}
}
}
};
【问题讨论】:
-
为什么不使用
std::map问题解决了。 -
或者只是一个更好的算法......
-
std::sort(array, array+size, [](count const &a, count const &b){ return a.frequency < b.frequency; }); -
^你能再解释一下吗?我知道它正在将数组从开头排序为数组+大小,但我不明白之后的部分。
-
一旦你弄清楚如何使用
std::sort、函子、lambda、运算符重载等。你也可以看到this。