一.sort函数
1.sort函数包含在头文件为#include
2.sort函数的模板有三个参数:
void sort (randomaccessiterator first, randomaccessiterator last, compare comp);
(1)第一个参数first:是要排序的数组的起始地址。
(2)第二个参数last:是结束的地址(最后一个数据的后一个数据的地址)
(3)第三个参数comp是排序的方法:可以是从升序也可是降序。如果第三个参数不写,则默认的排序方法是从小到大排序。
3.实例
1 #include2 #include 3 using namespace std; 4 main() 5 { 6 //sort函数第三个参数采用默认从小到大 7 int a[]={45,12,34,77,90,11,2,4,5,55}; 8 sort(a,a 10); 9 for(int i=0;i<10;i ) 10 cout<" "; 11 }
运行结果:
1 #include2 #include 3 using namespace std; 4 bool cmp(int a,int b); 5 main(){ 6 //sort函数第三个参数自己定义,实现从大到小 7 int a[]={45,12,34,77,90,11,2,4,5,55}; 8 sort(a,a 10,cmp); 9 for(int i=0;i<10;i ) 10 cout<" "; 11 } 12 //自定义函数 13 bool cmp(int a,int b){ 14 return a>b; 15 }
运行结果:
1 #include2 #include 3 #include"cstring" 4 using namespace std; 5 typedef struct student{ 6 char name[20]; 7 int math; 8 int english; 9 }student; 10 bool cmp(student a,student b); 11 main(){ 12 //先按math从小到大排序,math相等,按english从大到小排序 13 student a[4]={{"apple",67,89},{"limei",90,56},{"apple",90,99}}; 14 sort(a,a 3,cmp); 15 for(int i=0;i<3;i ) 16 cout<" "<" "<endl; 17 } 18 bool cmp(student a,student b){ 19 if(a.math >b.math ) 20 return a.math //按math从小到大排序 21 else if(a.math ==b.math ) 22 return a.english>b.english ; //math相等,按endlish从大到小排序23 24 }
运行结果
4.对于容器,容器中的数据类型可以多样化
1) 元素自身包含了比较关系,如int,double等基础类型,可以直接进行比较greater
1 #include2 #include 3 #include"vector" 4 using namespace std; 5 typedef struct student{ 6 char name[20]; 7 int math; 8 int english; 9 }student; 10 bool cmp(student a,student b); 11 main(){ 12 int s[]={34,56,11,23,45}; 13 vector<int>arr(s,s 5); 14 sort(arr.begin(),arr.end(),greater<int>()); 15 for(int i=0;i ) 16 cout< " "; 17 }
运行结果:
2)元素本身为class或者struct,类内部需要重载< 运算符,实现元素的比较;
注意事项:bool operator<(const classname & rhs) const; 如何参数为引用,需要加const,这样临时变量可以赋值;重载operator<为常成员函数,可以被常变量调用;
1 #include2 #include 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<" "<" " <<endl; 18 }
运行结果:
重载<也可以定义为如下格式:
1 struct cmp{ 2 bool operator()(info a1,info a2) const { 3 return a1.val > a2.val; 4 } 5 };