c++中vector中的排序,和pair中的排序
vector
一维
对于一个一维的vector,我们可以用这个,这个是默认从小到大排序的。
vector<int>v;
sort(v.begin(),v.end());
然后我们如果想从大到小排序的话,需要这样
int cmp(int x,int y){
return x>y;
}
vector<int>v;
sort(v.begin(),v.end(),cmp);
二维
这里我们是默认按照第一个也就是vv[i][0]排序的
vector<vector<int> > vv(10,vector<int>(2));
sort(vv.begin(),vv.end());
这样就是按照vv[i][1]排序
int cmp(vector<int> x,vector<int> y){
return x[1]>y[1];
}
vector<vector<int> > vv(10,vector<int>(2));
sort(v.begin(),v.end(),cmp);
lamda表达式
sort(vv.begin(),vv.end(),[&](vector<int> a, vector<int> b){
if(a[1]==b[1])return a[0]<b[0];
return a[1]<b[1];
});
例子
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<int>v;
vector<vector<int> > vv(10,vector<int>(2));
int cmp(vector<int> x,vector<int> y){
return x[1]>y[1];
}
int main(){
v.push_back(1);
v.push_back(0);
v.push_back(4);
v.push_back(3);
sort(v.begin(),v.end(),cmp);
for(int i=0;i<v.size();i++){
cout<<v[i]<<endl;
}
for(int i=9;i>=0;i--){
vv[i][0]=i;
vv[i][1]=i+1;
}
sort(vv.begin(),vv.end(),cmp);
// sort(vv.begin(),vv.end(),[&](vector<int> a, vector<int> b){
// if(a[1]==b[1])return a[0]<b[0];
// return a[1]<b[1];
// });
for(int i=0;i<=9;i++){
cout<<vv[i][0]<<" "<<vv[i][1]<<endl;
}
}
pair
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
pair<int,int>p[20];
int cmp(pair<int,int> x,pair<int,int> y){
return x.second>y.second;
}
int main(){
for(int i=0;i<20;i++){
p[i].first=i;
p[i].second=20-i;
}
sort(p,p+20,cmp);
for(int i=0;i<20;i++){
cout<<p[i].first<<" "<<p[i].second<<endl;
}
}