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
1 1
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解决。。

#include
   
   
    
    
#include
    
    
     
     
#include
     
     
      
      
#include
      
      
       
       
#include
       
       
         #include 
        
          #include 
         
           using namespace std; typedef long long ll; typedef long double ld; typedef pair 
          
            pr; const double pi=acos(-1); #define rep(i,a,n) for(int i=a;i<=n;i++) #define per(i,n,a) for(int i=n;i>=a;i--) #define Rep(i,u) for(int i=head[u];i;i=Next[i]) #define clr(a) memset(a,0,sizeof(a)) #define pb push_back #define mp make_pair #define fi first #define sc second #define pq priority_queue #define pqb priority_queue 
           
             , less 
            
              > #define pqs priority_queue 
             
               , greater 
              
                > #define vec vector ld eps=1e-9; ll pp=1000000007; ll mo(ll a,ll pp){if(a>=0 && a 
               
                 >=1,a=mo(a*a,pp))if(b&1)ans=mo(ans*a,pp);return ans;} //void add(int x,int y,int z){ v[++e]=y; next[e]=head[x]; head[x]=e; cost[e]=z; } int dx[5]={0,-1,1,0,0},dy[5]={0,0,0,-1,1}; ll read(){ ll ans=0; char last=' ',ch=getchar(); while(ch<'0' || ch>'9')last=ch,ch=getchar(); while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar(); if(last=='-')ans=-ans; return ans; } //以上头文件 struct node{ int nu,mu,iu; }nod[30005]; bool cmp(node a,node b){ if (a.mu<=6){ if (b.mu>6) return 1; if (b.mu<=6){ if (a.mu 
                
                  b.iu) return 0; return 1; } return 0; } } if (a.mu>=60){ if (b.mu<=6) return 0; if (b.mu>=60){ if (a.mu 
                 
                   b.iu) return 0; return 1; } return 1; } return 1; } if (b.mu>=60||b.mu<=6) return 0; if (a.iu>b.iu) return 0; return 1; } int main() { int n=read(); rep(i,1,n) nod[i].nu=read(),nod[i].mu=read(),nod[i].iu=i; sort(nod+1,nod+n+1,cmp); rep(i,1,n) printf("%d\n",nod[i].nu); } 
                  
                 
                
               
              
             
            
           
          
         
       
      
      
     
     
    
    
   
   
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值