今天get到了一点sort自定义排序函数的用法

sort函数的优势

STL中的sort()并非只是普通的快速排序,除了对普通的快速排序进行优化,它还结合了插入排序和堆排序。根据不同的数量级别以及不同情况,能自动选用合适的排序方法。当数据量较大时采用快速排序,分段递归。一旦分段后的数据量小于某个阀值,为避免递归调用带来过大的额外负荷,便会改用插入排序。而如果递归层次过深,有出现最坏情况的倾向,还会改用堆排序,是一个非常灵活方便的函数~

sort函数的使用

(1)头文件:

1
#include <algorithm>

(2)参数:

sort函数一共有三个参数:sort(begin, end, cmp)

​ <1> begin为指向待排序的结构的第一个元素的指针

​ <2> end为指向待排序的结构的最后一个元素的下一个位置的指针

​ <3> cmp参数为排序准则,cmp参数可以不写,如果不写的话,默认从小到大进行排序

(3)自定义排序准则

​ <1> 对类排序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Pair
{
public:
string name; // 学生姓名
int grade; // 学生成绩
};

// 将你希望情况作为返回
bool cmp_grade(Pair x, Pair y) // x为前一项数据,y为后一项数据
{
return x.grade > y.grade;
}

sort(pair, pair + n, cmp_grade); // n为学生人数

​ <2> 对一般数据类型从大到小排序

注意:这里的greater是函数,要加()

1
2
3
4
5
6
7
8
int num1[3] = {3, 1, 2};
sort(num1, num1 + 3, greater<int>());

float num2[3] = {3.1, 1.2, 2.3};
sort(num2, num2 + 3, greater<float>());

double num3[3] = {3.1125, 1.2332, 2.3556};
sort(num3, num3 + 3, greater<double>());

还有别的用法欢迎在评论区补充~