前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++中sort函数使用方法

C++中sort函数使用方法

作者头像
狼啸风云
修改2022-09-02 20:53:43
1.6K0
修改2022-09-02 20:53:43
举报
文章被收录于专栏:计算机视觉理论及其实现

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

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

代码语言:javascript
复制
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

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

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

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

3.实例

代码语言:javascript
复制
 #include<iostream>
 #include<algorithm>
 using namespace std;
 main()
 {
   //sort函数第三个参数采用默认从小到大
   int a[]={45,12,34,77,90,11,2,4,5,55};
   sort(a,a+10);
   for(int i=0;i<10;i++)
   cout<<a[i]<<" ";     
} 

运行结果:

代码语言:javascript
复制
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a,int b);
main(){
  //sort函数第三个参数自己定义,实现从大到小 
  int a[]={45,12,34,77,90,11,2,4,5,55};
  sort(a,a+10,cmp);
  for(int i=0;i<10;i++)
    cout<<a[i]<<" ";     
}
//自定义函数
bool cmp(int a,int b){
  return a>b;
}

运行结果:

代码语言:javascript
复制
 #include<iostream>
 #include<algorithm>
 #include"cstring"
 using namespace std;
 typedef struct student{
   char name[20];
   int math;
   int english;
}Student;
bool cmp(Student a,Student b);
main(){
  //先按math从小到大排序,math相等,按english从大到小排序 
  Student a[4]={{"apple",67,89},{"limei",90,56},{"apple",90,99}};
  sort(a,a+3,cmp);
  for(int i=0;i<3;i++)    
  cout<<a[i].name <<" "<<a[i].math <<" "<<a[i].english <<endl;     
}
bool cmp(Student a,Student b){
  if(a.math >b.math )
  return a.math <b.math ;//按math从小到大排序 
  else if(a.math ==b.math )
      return a.english>b.english ; //math相等,按endlish从大到小排序23 
}

运行结果

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

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

代码语言:javascript
复制
 #include<iostream>
 #include<algorithm>
 #include"vector"
 using namespace std;
 typedef struct student{
      char  name[20];
      int math;
      int english;
 }Student;
bool cmp(Student a,Student b);
main(){
    int s[]={34,56,11,23,45};
    vector<int>arr(s,s+5);
    sort(arr.begin(),arr.end(),greater<int>());
    for(int i=0;i<arr.size();i++)
        cout<<arr[i]<<" ";        
}

运行结果:

2)元素本身为class或者struct,类内部需要重载< 运算符,实现元素的比较;

注意事项:bool operator<(const className & rhs) const; 如何参数为引用,需要加const,这样临时变量可以赋值;重载operator<为常成员函数,可以被常变量调用;

代码语言:javascript
复制
 #include<iostream>
 #include<algorithm>
 #include"vector"
 using namespace std;
 typedef struct student{
     char  name[20];
     int math;
     //按math从大到小排序 
     inline bool operator < (const student &x) const {
        return math>x.math ;
     }
}Student;
main(){
    Student a[4]={{"apple",67},{"limei",90},{"apple",90}};
    sort(a,a+3);
    for(int i=0;i<3;i++)    
        cout<<a[i].name <<" "<<a[i].math <<" " <<endl;     
}

运行结果:

重载<也可以定义为如下格式:

代码语言:javascript
复制
struct Cmp{
    bool operator()(Info a1,Info a2) const {
    return a1.val > a2.val;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档