头文件
c++中使用sort()函数需要使用#include<algorithm>头文件。algorithm意为“算法”,是c++的标准模板库(STL)中最重要的头文件之一,提供了大量基于迭代器的非成员模版函数。
基本使用方法
sort()函数可以对给定区间所有元素进行排序。它有三个参数sort(begin, end, cmp),其中begin为指向待sort()的数组的第一个元素的指针,end为指向待sort()的数组的最后一个元素的下一个位置的指针,cmp参数为排序准则,cmp参数可以不写,如果不写的话,默认从小到大进行排序。如果我们想从大到小排序可以将cmp参数写为greater<int>()就是对int数组进行排序,当然<>中我们也可以写double、long、float等等。如果我们需要按照其他的排序准则,那么就需要我们自己定义一个bool类型的函数来传入。比如我们对一个整型数组进行从小到大排序:
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int num[5]={2,3,0,4,1};
sort(num,num+5);//不写cmp默认从小到大排序
for(int i=0;i<5;i++){
cout<<num[i];
}
}
//输出结果为01234
如果从大到小:
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int num[5]={2,3,0,4,1};
sort(num,num+5,greater<int>());
for(int i=0;i<5;i++){
cout<<num[i];
}
}
//输出结果为43210
自定义排序准则
如果我们不想从小到大或者是从大到小排序,那么我们可以自定义。如下
bool cmp(int x,int y){
return x % 10 > y % 10;
}
这个意思是,我们按照每个数的个位进行从大到小排序。
然后我们将这个cmp函数作为参数传入sort()中即可实现了上述排序需求。
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int x,int y){
return x%10>y%10;
}
int main(){
int num[5]={2,3,0,4,1};
sort(num,num+5,cmp);
for(int i=0;i<5;i++){
cout<<num[i];
}
}
//输出结果为43210
另外, greater<int>() 【当然此时的int也可换做double,long long 之类的。】也相当于:
bool cmp(long long x,long long y){
return x>y;
}
(作者做题时候发现明明 greater<int>()就搞定了,结果又多写了个上面的代码...悲)
对结构体进行排序
sort()也可以对结构体进行排序,比如我们定义一个结构体含有学生的姓名和成绩的结构体Student,然后我们按照每个学生的成绩从高到底进行排序。首先我们将结构体定义为:
struct Student{
string name;
int score;
Student() {}
Student(string n,int s):name(n),score(s) {}
};
根据排序要求我们可以将排序准则函数写为:
bool cmp_score(Student x,Student y){
return x.score > y.score;
}
全部代码:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct Student{
string name;
int score;
Student() {}
Student(string n,int s):name(n),score(s) {}
};
bool cmp_score(Student x,Student y){
return x.score > y.score;
}
int main(){
Student stu[3];
string n;
int s;
for(int i=0;i<3;i++){
cin>>n>>s;
stu[i] = Student(n,s);
}
sort(stu,stu+3,cmp_score);
for(int i=0;i<3;i++){
cout<<stu[i].name<<" "<<stu[i].score<<endl;
}
return 0;
}
希望能帮助你认识sort()排序!