菜鸟笔记
提升您的技术认知

c 中sort函数使用方法-ag真人游戏

一.sort函数

1.sort函数包含在头文件为#include的c 标准库中,调用标准库里的排序方法可以实现对数据的排序,但是sort函数是如何实现的,我们不用考虑!

2.sort函数的模板有三个参数:

void sort (randomaccessiterator first, randomaccessiterator last, compare comp);

(1)第一个参数first:是要排序的数组的起始地址。

(2)第二个参数last:是结束的地址(最后一个数据的后一个数据的地址)

(3)第三个参数comp是排序的方法:可以是从升序也可是降序。如果第三个参数不写,则默认的排序方法是从小到大排序。

3.实例

 1 #include
 2 #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 #include
 2 #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 #include
 2 #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() 递减, less() 递增(省略)

 1 #include
 2 #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 #include
 2 #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 };

 

网站地图