• c++ stl sort


    c++ stl 是一个用途广泛的东东,

    而stl中的sort又是最常用的,于是乎,就来聊聊这个神奇的东西。

    使用sort需要调用algorithm库,默认排序升序。

    那么怎么用呢?就有sort(begin,end);

    举个例子:

    int main()

    {

    int a[5]={10,31,16,23,12}

    sort(a,a+5);

    for (int i=0;i<5;i++)

      cout<<a[i]<<" ";

    }

    就会输出:10,12,16,23,31;

    那么问题又来了怎么去降序排列呢,

    这里就有了一个概念cmp,cmp返回值为1及不交换,为0交换,

    有下cmp:

    bool cmp ( int a,int b ){

    return a>b;

    }

    及能做到降序,结构体又怎么办呢?

    struct node{

    int x,y;

    };

    bool cmp(node a,node b){
    return (a.x<b.x)||(a.x==b.x)&&(a.y<b.y);
    }

    能做到先按node.x升序排序,若一样就按node.y排序。

    c++这个东西,生来就是乱搞的,那sort怎么搞呢?有⬇️题目:



    2147: 排队

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 36  解决: 16
    [提交][状态][讨论版]

    题目描述

    在很多场合,我们都需要排队,比如超市付款,医院看病,就餐等等。“尊老爱幼”是
    中华名族的传统美德,所以在排队的过程中,遇到老人、幼儿我们应该主动让他们排在前面。
    请按以下 4 条规则编写一个排队的程序。
    (1) 老人(年龄 ≥ 60 岁)和幼儿(年龄 ≤ 6 岁)比其他人(6 岁 < 年龄 < 60 岁)优先排在队伍的前面,且所有幼儿排在所有老人的前面。
    (2) 老人按年龄从大到小的顺序排队,年龄大的优先,年龄相同时,先到的人排在前面。
    (3) 幼儿按年龄从小到大的顺序排队,年龄小的优先,年龄相同时,先到的人排在前面。
    (4) 其他人只按到达的先后顺序排队。

     

    输入

    输入共 n+1 行。
    第 1 行一个整数 n,表示排队的总人数。
    第 2 行到第 n+1 行,按照到达的先后顺序给出了每个人的基本信息。每行两个整数,
    第一个整数表示这个人的编号(编号保证不会重复,但不保证连续),第二个整数表示这个
    人的年龄。

     

    输出

    输出共 n 行。
    每行一个人的编号,表示从前往后的排队结果。

     

    样例输入

    8
    1 14
    3 6
    4 5
    5 62
    11 48
    17 25
    21 60
    13 62

    样例输出

    4
    3
    5
    13
    21
    1
    11
    17

    提示

     

    【样例解释】

    共有 8 个人参加排队。编号为 3 和 4 的两个人为幼儿,年龄分别为 6 岁和 5 岁。编号为5 、21 和 13 的三个人为老人,年龄分别为 62 岁、60 岁和 62 岁。根据排队规则,老人和幼儿排在其他人的前面,而幼儿又排在老人的前面,所以先排编号 3 和 4 的幼儿。 幼儿按年龄从小到大的顺序排队,所以第一个人是 4 号,然后是 3 号。接下来排老人,老人年龄大的先排,所以先排 5 号和 13 号,但 5 号比 13 号先到,所以先排 5 号,然后 13 号,接下来 21号。剩下的人不论年龄大小,全部按到达的顺序排队,依次为 1 号、11 号和 17 号。

    【数据范围约定】

    40%的测试点输入数据保证 1≤n≤99,且每个人的年龄都不相同。

    60%的测试点输入数据保证 1≤n≤1000。

    100%的测试点输入数据保证 1≤n≤30000, 1≤人的编号≤32000, 2≤人的年龄≤100。


     

     

    一般来说这种题目要弄很多个数组在那搞来搞去,

    而我比较懒,于是,就全写进cmp,一趟sort解决。。

     
     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstdio>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<cstdlib>
     7 #include<vector>
     8 using namespace std;
     9 typedef long long ll;
    10 typedef long double ld;
    11 typedef pair<int,int> pr;
    12 const double pi=acos(-1);
    13 #define rep(i,a,n) for(int i=a;i<=n;i++)
    14 #define per(i,n,a) for(int i=n;i>=a;i--)
    15 #define Rep(i,u) for(int i=head[u];i;i=Next[i])
    16 #define clr(a) memset(a,0,sizeof(a))
    17 #define pb push_back
    18 #define mp make_pair
    19 #define fi first
    20 #define sc second
    21 #define pq priority_queue
    22 #define pqb priority_queue <int, vector<int>, less<int> >
    23 #define pqs priority_queue <int, vector<int>, greater<int> >
    24 #define vec vector
    25 ld eps=1e-9;
    26 ll pp=1000000007;
    27 ll mo(ll a,ll pp){if(a>=0 && a<pp)return a;a%=pp;if(a<0)a+=pp;return a;}
    28 ll powmod(ll a,ll b,ll pp){ll ans=1;for(;b;b>>=1,a=mo(a*a,pp))if(b&1)ans=mo(ans*a,pp);return ans;}
    29 //void add(int x,int y,int z){ v[++e]=y; next[e]=head[x]; head[x]=e; cost[e]=z; }
    30 int dx[5]={0,-1,1,0,0},dy[5]={0,0,0,-1,1};
    31 ll read(){ ll ans=0; char last=' ',ch=getchar();
    32 while(ch<'0' || ch>'9')last=ch,ch=getchar();
    33 while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar();
    34 if(last=='-')ans=-ans; return ans;
    35 }
    36 //以上头文件
    37 
    38 
    39 
    40 struct node{
    41     int nu,mu,iu;
    42 }nod[30005];
    43 bool cmp(node a,node b){
    44     if (a.mu<=6){
    45         if (b.mu>6) return 1;
    46         if (b.mu<=6){
    47             if (a.mu<b.mu) return 1;
    48             if (a.mu==b.mu){
    49                 if (a.iu>b.iu) return 0;
    50                 return 1;
    51             }
    52             return 0;
    53         }
    54     } 
    55     if (a.mu>=60){
    56         if (b.mu<=6) return 0;
    57         if (b.mu>=60){
    58             if (a.mu<b.mu) return 0;
    59             if (a.mu==b.mu){
    60                 if (a.iu>b.iu) return 0;
    61                 return 1;
    62             }
    63             return 1;
    64         }
    65         return 1;
    66     }
    67     if (b.mu>=60||b.mu<=6) return 0;
    68     if (a.iu>b.iu) return 0;
    69     return 1;
    70 }
    71 int main()
    72 {
    73     int n=read();
    74     rep(i,1,n) nod[i].nu=read(),nod[i].mu=read(),nod[i].iu=i;
    75     sort(nod+1,nod+n+1,cmp);
    76     rep(i,1,n) printf("%d
    ",nod[i].nu);
    77 }
    View Code
  • 相关阅读:
    Java动态绑定与多态
    Java中的equals,==,compareTo和compare的比较
    Java访问控制权限
    如何用eclipse进行jar文件打包?
    堆和栈的区别
    Java命名规则
    Java面向对象的基本概念
    java中length,length(),size()区别
    《剑指offer》第二十题:表示数值的字符串
    《剑指offer》第十九题:正则表达式匹配
  • 原文地址:https://www.cnblogs.com/SXia/p/6747786.html
Copyright © 2020-2023  润新知