• C++中SORT函数使用方法


    一.sort函数

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

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

    void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

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

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

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

    3.实例

    复制代码
     1 #include<iostream>
     2 #include<algorithm>
     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<<a[i]<<" ";     
    11 } 
    复制代码

    运行结果:

    复制代码
     1 #include<iostream>
     2 #include<algorithm>
     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<<a[i]<<" ";     
    11 }
    12 //自定义函数
    13 bool cmp(int a,int b){
    14   return a>b;
    15 }
    复制代码

    运行结果:

    复制代码
     1 #include<iostream>
     2 #include<algorithm>
     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<<a[i].name <<" "<<a[i].math <<" "<<a[i].english <<endl;     
    17 }
    18 bool cmp(Student a,Student b){
    19   if(a.math >b.math )
    20   return a.math <b.math ;//按math从小到大排序 
    21   else if(a.math ==b.math )
    22       return a.english>b.english ; //math相等,按endlish从大到小排序23 
    24 }
    复制代码

    运行结果

    4.对于容器,容器中的数据类型可以多样化

      1) 元素自身包含了比较关系,如int,double等基础类型,可以直接进行比较greater<int>() 递减, less<int>() 递增(省略)

    复制代码
     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     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<arr.size();i++)
    16         cout<<arr[i]<<" ";        
    17 }
    复制代码

    运行结果:

    2)元素本身为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 };
  • 相关阅读:
    HHHOJ #153. 「NOI模拟 #2」Kotomi
    HHHOJ #151. 「NOI模拟 #2」Nagisa
    Luogu P5298 [PKUWC2018]Minimax
    Luogu P5368 [PKUSC2018]真实排名
    Luogu P5408 【模板】第一类斯特林数·行
    Codechef December Challenge 2019 Division 1
    AtCoder Grand Contest 040
    CSP2019游记(翻车记)
    Codeforces Round #594 (Div. 1)
    AtCoder Grand Contest 039
  • 原文地址:https://www.cnblogs.com/Ph-one/p/14067965.html
Copyright © 2020-2023  润新知