stl实现结构体排序关键语法要点(sort)

sort函数,调用时使用函数头:

#include <algorithm>

sort(begin,end);用来表示一个范围。

 1 int _tmain(int argc, _TCHAR* argv[])
 2 {
 3  int a[20]={2,4,1,23,5,76,0,43,24,65},i;
 4  for(i=0;i<20;i++)
 5   cout<<a[i]<<endl;
 6  sort(a,a+20);
 7  for(i=0;i<20;i++)
 8  cout<<a[i]<<endl;
 9  return 0;
10 }
View Code

sort默认是升序排列的,当要更改为降序排列:

那么首先是自己写一个比较函数,然后调用三个参数的sort即可

调用三个参数的sort:sort(begin,end,compare)

 1 bool compare(int a,int b)
 2 {
 3       return a<b;   //升序排列,如果改为return a>b,则为降序
 4 
 5 }
 6 
 7 int _tmain(int argc, _TCHAR* argv[])
 8 {
 9      int a[20]={2,4,1,23,5,76,0,43,24,65},i;
10      for(i=0;i<20;i++)
11        cout<<a[i]<<endl;
12      sort(a,a+20,compare);
13      for(i=0;i<20;i++)
14        cout<<a[i]<<endl;
15      return 0;
16 }
View Code

struct name{
char a[20];
int b;
}ch[max];

bool cmp(name A, name B){
return A.b>B.b;
}

for(int i=0; i<n; i++){
cin>>ch[i].a>>ch[i].b;
}
sort(ch, ch+n, cmp);

for(int i=0; i<n; i++){
cout<<ch[i].a<<" "<<ch[i].b<<endl;
}

当是有一些条件进行排序时,可以使用下边的方式:

题目描述

用一维数组存储学号和成绩,然后,按成绩排序输出。 
输入描述:
输入第一行包括一个整数N(1<=N<=100),代表学生的个数。
接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。


输出描述:
按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。
如果学生的成绩相同,则按照学号的大小进行从小到大排序。

输入例子:
3
1 90
2 87
3 92

输出例子:
2 87
1 90
3 92

  

 1 #include <iostream>
 2 #include <algorithm>
 3 #define max 105
 4 
 5 using namespace std;
 6 
 7 struct tianxia{
 8     int p;
 9     int q;
10 }S[max];
11 
12 bool cmp(tianxia A,tianxia B){
13     if(A.q==B.q){
14         return A.p<B.p;
15     }else{
16         return A.q<B.q;
17     }
18 }
19 
20 int main()
21 {
22     int N;
23     while(cin>>N){
24         for(int i = 0;i < N; i++){
25             cin>>S[i].p>>S[i].q;
26         }
27         sort(S,S+N,cmp);
28 
29         for(int i = 0;i < N; i++){
30             cout<<S[i].p<<" "<<S[i].q<<endl;
31         }
32     }
33     return 0;
34 }
我要坚持一年,一年后的成功才是我想要的。
原文地址:https://www.cnblogs.com/tianxia2s/p/5365194.html