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函数的写法应该会经常用到,因此单独拿出来说!