C++的sort函数(非原创)

1.函数介绍

使用sort函数前要提前导入c++的标准库中的algorithm库。

sort函数有三个需要输入的参数:

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

first:待排序数组的起始地址。

last:待排序数组的最后一个数据的下一个数据的地址。(即左闭右开)

comp:排序方法,升序或降序,默认升序。(可以自己重写该方法)

2.实例

采用默认升序方式

#include<iostream>
#include<algorithm>
using namespace std;
main()
{
  //默认采用升序排列
  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]<<" ";
}

自定义comp参数,采用降序排列方式

#include<iostream>
#include<algorithm>
using namespace std;

bool cmp(int a,int b);
int 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]<<" ";
    return;
}

//自定义函数,实现降序排列
bool cmp(int a,int b){
  return a>b;
}

3.容器数据类型(还未完全理解含义)

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

#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);
    //注意comp参数的写法
    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<为常成员函数,可以被常变量调用; 

#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;

int 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;
    }
};

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------转载自:https://www.cnblogs.com/junbaobei/p/10776066.html

上一篇:292.nim游戏


下一篇:Acwing 291. 蒙德里安的梦想