在官方定义中,sort函数有三个参数
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp)
分别是
first:是要排序的数组的起始地址。
last:是结束的地址(最后一个数据的后一个数据的地址)
comp是排序的方法:可以是从升序也可是降序。如果第三个参数不写,则默认的排序方法是从小到大排序。
当我们不使用comp时,sort函数默认为升序处理。常用sort(shuzu.begin(),shuzu.end())
当排序数组时,如果有定长度要求,可设置为sort(shuzu,shuzu+3)
定义comp方法:
comp是bool型的,有两个数据接口,我们这里设置为a、b
一般情况下:
bool cmp(Student a,Student b){
if(a.math >b.math )
return a.math <b.math ;}
我们可以简单认为输入到comp的两者a、b在经过函数体处理后,如果返回true,返回a值,false返回b值。全部元素可认为是comp迭代产生。
容器中:
一、容器有很多关系,直接进行比较greater<int>() 递减, less<int>() 递增
用法:
sort(arr.begin(),arr.end(),greater<int>());
二、或者元素本身为class或者struct,类内部需要重载< 运算符,实现元素的比较;
注意事项:bool operator<(const className & rhs) const; 如何参数为引用,需要加const,这样临时变量可以赋值;重载operator<为常成员函数,可以被常变量调用;
1 #include<iostream>
2 #include<algorithm>
3 #include"vector"
4 using namespace std;
5 typedef struct student{
6 char name[20];
7 int math;
8 //按math从大到小排序
9 inline bool operator < (const student &x) const {
10 return math>x.math ;
11 }
12 }Student;
13 main(){
14 Student a[4]={{"apple",67},{"limei",90},{"apple",90}};
15 sort(a,a+3);
16 for(int i=0;i<3;i++)
17 cout<<a[i].name <<" "<<a[i].math <<" " <<endl;
18 }
如下也可以:
1 struct Cmp{
2 bool operator()(Info a1,Info a2) const {//其中())为重载的符号
3 return a1.val > a2.val;
4 }
5 };
看看这位博主的,讲的更细致https://blog.csdn.net/qq_46527915/article/details/114597901