上文链接:https://blog.csdn.net/slient_love/article/details/104277371
成绩排序-多关键字
题目描述
用一维数组存储学号和成绩,然后,按成绩排序输出。
输入描述:
输入第一行包括一个整数N(1<=N<=100),代表学生的个数。 接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。
输出描述:
按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。 如果学生的成绩相同,则按照学号的大小进行从小到大排序。
示例:
输入:
3
1 90
2 87
3 92
输出:
2 87
1 90
3 92
做题思路:
对这种根据两个关键字进行排序的题,最好的方法就是定义结构体,然后利用
STL
中自带的sort函数对元素进行排序,要使用此函数只需引用
#include <algorithm>
即可。
代码展示:
#include <iostream>
#include <algorithm>
using namespace std;
struct node{
int p;
int q;
};
bool comp(node a,node b){
if(a.q==b.q){
return a.p<b.p;
}else{
return a.q<b.q;
}
}
int main()
{
int n;
cin>>n;
node a[n];
for(int i=0;i<n;i++){
cin>>a[i].p;
cin>>a[i].q;
}
sort(a,a+n,comp);
for(int i=0;i<n;i++){
cout << a[i].p<<" "<<a[i].q << endl;
}
return 0;
}
知识拓展:
sort()排序函数用法:
sort(first_pointer,first_pointer+n,cmp)
参数1:第一个参数是数组的首地址,一般写上数组名就可以,因为数组名是一个指针常量。
参数2:第二个参数即首地址加上数组的长度n(代表尾地址的下一地址)。
参数3:默认可以不填,如果不填sort会默认按数组升序排序。也可以自定义一个排序函数,改排序方式为降序什么的。
例如:
bool compare(int a,int b)
{
return a<b; //升序排列,如果改为return a>b,则为降序
}
下文链接:https://blog.csdn.net/slient_love/article/details/104310092