sort

我们都知道,在对一维数组或Vector排序,可以直接调用STL的算法sort进行排序。

vecotr<int> nums{1,4,2,3};
sort(nums.begin(),nums.end());//默认升序 从小到大
//sort(nums.begin(),nums.end(),greater());//降序 从大到小

二维数组排序

做题时,经常会遇到对二维数组排序。举个例子,现在有一个年级乱序数学成绩表sorce[class][sorce]

班级 成绩
1 90
3 80
2 92
1 95
3 91
2 97

现在要求按照班级从小到大输出,同班级的按照成绩从大到小输出。

如果直接调用sort排序会得到,会得到一个按照出现顺序的排序,不符合要求。

	vector<vector<int>> nums1{{1,90},{3,80},{2,92},{1,95},{3,91},{2,97}};
	sort(nums1.begin(),nums1.end());

在这里插入图片描述

方法1: Lambda表达式

	vector<vector<int>> nums1{{1,90},{3,80},{2,92},{1,95},{3,91},{2,97}};
	sort(nums1.begin(),nums1.end(),[](vector<int> &a,vector<int> &b){
		return a[0]==b[0] ? a[1]>b[1] : a[0]<b[0];
	});

在这里插入图片描述

方法2:自定义函数

#include<bits/stdc++.h>
using namespace std;
//自定义函数
static bool mysort(vector<int> &a,vector<int> &b){
	if(a[0]==b[0])
		return a[1]>b[1];
	return a[0]>b[0];
} 
int main(){	
	vector<vector<int>> nums2{{1,90},{3,80},{2,92},{1,95},{3,91},{2,97}};
	sort(nums2.begin(),nums2.end(),mysort);
	for(auto x:nums2){//打印结果
		for(auto y:x)
			cout<<y<<" ";	
		cout<<endl;
	}
}

在这里插入图片描述

以上就是二维数组排序的实现方法,读者可以根据题目要求,修改Lamdad表达式和自定义函数中的 比较符号 实现。

#include<bits/stdc++.h>
using namespace std;

//自定义函数
static bool mysort(vector<int> &a,vector<int> &b){
	if(a[0]==b[0])
		return a[1]>b[1];
	return a[0]<b[0];
} 
//打印结果
void show(vector<vector<int>> temp){
	for(auto x:temp){
		for(auto y:x)
			cout<<y<<" ";	
		cout<<endl;
	}	
}
int main(){	

	vector<vector<int>> nums{{1,90},{3,80},{2,92},{1,95},{3,91},{2,97}};
	vector<vector<int>> nums1=nums;
	vector<vector<int>> nums2=nums;
	
	//直接调用sort
	sort(nums.begin(),nums.end());
	show(nums);
	
	//1. Lamdad表达式	
	cout<<endl<<"*******Lambda表达式*******"<<endl;
	sort(nums1.begin(),nums1.end(),[](vector<int> &a,vector<int> &b){
		return a[0]==b[0] ? a[1]>b[1] : a[0]<b[0];
	});
	show(nums1);
	
	//2.自定义函数
	cout<<endl<<"*******自定义函数*******"<<endl;
	sort(nums2.begin(),nums2.end(),mysort);
	show(nums2);
}
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐