上文連結: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