sort()

1.使用方法

头文件加上“#include ”和“using namespace std;”。
函数方式:
sort(首元素地址(必填),尾元素地址的下一个地址(必填),比较函数(非必填));
不写比较函数默认对前面区间进行递增排序!
sort函数的第三个可选参数一般为compare函数(一般写做cmp函数)。

2.如何实现cmp函数?

#include <algorithm>
#include <stdio.h>
using namespace std;

bool cmp(int a, int b){
    return a>b;//可以理解为把a放到b前面
}
int main() {
    int a[] = {3,1,6,2};
    sort(a,a+4,cmp);
    for(int i=0;i<4;i++){
        printf("%d",a[i]);
    }
    return 0;
}

记忆方法:要把数据从大到小进行排序,那么就用“ > ”,因为“a > b”就是左大右小。要把数据从小到大,就是“ < ”,因为“a < b”,左小右大。不确定的时候,随便先试试就知道应该用哪种的了!

3.容器的排序

在STL标准容器中,只有vector、string、deque可以使用sort函数。因为如set、map这种容器使用红黑树实现的,元素本身有序,所以不允许使用sort函数!
以vector容器为例子:

#include <algorithm>
#include <stdio.h>
#include <vector>
using namespace std;

bool cmp(int a, int b){
    return a < b;
}
int main() {
    vector<int> v;
    v.push_back(3);
    v.push_back(7);
    v.push_back(1);
    sort(v.begin(),v.end(),cmp);
    for(int i=0;i<3;i++){
        printf("%d",v[i]);
    }
    return 0;
}

补充一个常见的内容:

用sort函数对结构体数据进行排序。
结构体如下:

struct node{
    int x,y;
}student[maxn];

如果想要先按照x的值从大到小进行排序,但如果遇到x相等的情况,就按照y的大小从小到大进行排序,此时的cmp函数如何写呢?

bool cmp(node a, node b){
    if(a.x != b.x)    return a.x > b.x;
    else return a.y < b.y;
}

上面的cmp函数的写法应该会经常用到,因此单独拿出来说!