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;	
	}
	
}
posted @ 2023-11-15 20:24  lipu123  阅读(484)  评论(0)    收藏  举报