C++中sort函数使⽤⽅法
1. sort函数包含在头⽂件为#include的c++标准库中,调⽤标准库⾥的排序⽅法可以实现对数据的排序。
2. sort函数的模板有三个参数:
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
(1)第⼀个参数first:是要排序的数组的起始地址。
(2)第⼆个参数last:是结束的地址(最后⼀个数据的后⼀个数据的地址)
(3)第三个参数comp是排序的⽅法:可以是从升序也可是降序。如果第三个参数不写,则默认的排序⽅法是从⼩到⼤排序。
3. 实例
cstring转为int#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]<<" ";
}
#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;
}
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 )
      lish&lish ;//math相等,按endlish从⼤到⼩排序23
}
4. 对于容器,容器中的数据类型可以多样化
1) 元素⾃⾝包含了⽐较关系,如int,double等基础类型,可以直接进⾏⽐较greater() 递减, less() 递增(省略)
#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(),d(),greater<int>());
for(int i=0;i<arr.size();i++)
cout<<arr[i]<<" ";
}
2)元素本⾝为class或者struct,类内部需要重载< 运算符,实现元素的⽐较;
注意事项:bool operator<(const className & rhs) const; 如何参数为引⽤,需要加const,这样临时变量可以赋值;重载operator<;为常成员函数,可以被常变量调⽤;
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; }
重载<;也可以定义为如下格式:
struct Cmp{
bool operator()(Info a1,Info a2)const{
return a1.val > a2.val;
}
};

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。