• 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 }
    我要坚持一年,一年后的成功才是我想要的。
  • 相关阅读:
    Spring Bean Expression Language(EL)
    Spring-web-security Issue (Access is denied. User must have one of the these roles: ACTUATOR)
    数据库学习笔记day04
    数据库学习笔记day03
    数据库学习笔记day01+day02
    Java学习笔记--线程day01
    Java学习笔记-Java文件操作流
    第一次月测题
    第一次月测内容疑问总结
    java核心API
  • 原文地址:https://www.cnblogs.com/tianxia2s/p/5365194.html
Copyright © 2020-2023  润新知