sort 函数的自定义排序
前言
以前只知道sort的排序很方便,也知道sort和结构体一起使用可以自定义排序元素,但是今天,做了个题目,有个新的启发,sort在STL中的自定义该如何去写????
STL中的sort自定义模板
vector<T> ve;
bool cmp(const T &a,const T &b){
........//写你要定义的排序函数
}
例子
假设一个场景,让你按成绩排序,并输出成绩和姓名,如果是结构体的写法的话应该是这样:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Student{
string name;
int score;
};
bool cmp(Student a,Student b){
return a.score > b.score;
}
int main(){
Student stu[3];
stu[0].name = "a";
stu[0].score = 88;
stu[1].name = "b";
stu[1].score = 99;
stu[2].name = "c";
stu[2].score = 66;
sort(stu,stu+3,cmp);
for(int i = 0;i < 3;i++){
cout << stu[i].name << " " << stu[i].score << endl;
}
return 0;
}
而利用STL中的sort以及pair则可以这样
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<pair<string,int>> stu;
bool cmp(const pair<string,int>&a,const pair<string,int>&b){
return a.second>b.second;
}
int main(){
stu.push_back({"a",88});
stu.push_back({"b",99});
stu.push_back({"c",66});
sort(stu.begin(),stu.end(),cmp);
for(int i = 0;i < 3;i++){
cout << stu[i].first << " " << stu[i].second << endl;
}
return 0;
}
这样在做题时就很舒服,哈哈哈哈