这次的排序有两个标准,第一标准是成绩(从小到大),第二标准是序号(从小到大)
代码如下所示:
#include<iostream>
#include<algorithm>
using namespace std;
struct Student{
int number;
int score;
};
const int MAXN=100;
Student arr[MAXN];
bool Compare(Student x,Student y){
if(x.score != y.score){
return x.score<y.score;
}
else{
return x.number<y.number;
}
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d%d",&arr[i].number,&arr[i].score);
}
sort(arr,arr+n,Compare);
for(int i=0;i<n;i++){
printf("%d %d\n",arr[i].number,arr[i].score);
}
return 0;
}
第一标准是成绩(从小到大),第二标准是序号(从小到大),结果如下所示:
如果想要换一下排序标准呢?
第一标准是成绩(从大到小),第二标准是序号(从小到大),结果如下所示:
观察代码可以发现:return后的语句为真时,Compare()的第一个参数在前,第二个参数在后,即x.score比y.score大时,x排在y前面,即谁大谁在前,按从大到小排列。
Compare()函数里的if语句判断的参数为比较标准的第一位维度,当第一维度的参数相等时才比较第二维度。
若第一维度为序号,从大到小排列;第二维度为成绩,从大到小排列,代码应该写成什么样呢? 如下所示。