码迷,mamicode.com
首页 > 其他好文 > 详细

sort函数使用

时间:2018-03-12 21:09:43      阅读:580      评论:0      收藏:0      [点我收藏+]

标签:时间   结构   2.3   span   ios   php   程序   存储   输出   

  

问题 C: 谁是老二(结构体)

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

题目描述

定义一个结构体,包含年月日,表示一个学生的出生日期。然后在一群学生的出生日期中找出谁的出生日期排行第二

要求:出生日期的存储必须使用结构体,不能使用其他类型的数据结构。

要求程序全过程对出生日期的输入、访问、输出都必须使用结构。

 

输入

第一行输入t表示有t个出生日期

每行输入三个整数,分别表示年、月、日

依次输入t个实例

 

输出

输出排行第二老的出生日期,按照年-月-日的格式输出

 

样例输入

6 1980 5 6 1981 8 3 1980 3 19 1980 5 3 1983 9 12 1981 11 23

样例输出

1980-5-3

提示

代码

#include<iostream>
#include<algorithm>
using namespace std;

struct student
{
    int year;
    int mouth;
    int day;
};

int cmp(student p,student q)
{
        if(p.year < q.year)
        {
             return 1;
        }
        else if(p.year==q.year)
        {
            if(p.mouth < q.mouth)
            {
                return 1;
            }
            else if(p.mouth==q.mouth)
            {
                if(p.day < q.day)
                {
                    return 1;
                }
            }
        }
        return 0;
}

int main()
{
    int t;
    cin>>t;
    student *p;
    p = new student[t];
    for(int i=0;i<t;i++)
    {
        cin>>(p+i)->year>>(p+i)->mouth>>(p+i)->day;
    }
    
    for(int i=0;i<t-1;i++)//循环t-1次
    {
        for(int j=0;j<t-1;j++)
        {
            if(cmp(p+j,p+j+1))
            {
                swap(*(p+j),*(p+j+1));
            }
        }
    }
    
    sort(p,p+t-1,cmp);
    cout<<(p+1)->year<<-<<(p+1)->mouth<<-<<(p+1)->day<<endl;

    return 0;
}

这里面说要输出第二个,这属于结构体的多级排序,一般这种我们可以用 sort 函数 加上 我们自定义的 cmp来进行排序。

sort(a,b,c);头文件在 #include<algorithm>

a:排序的起始地址。

b:排序的结尾地址。

c :排序方法。

若无c,默认升序

cmp函数:若满足二者交换,返回1,不满足返回0。

多级排序方法写法见上。

另外加一个 swap函数,参数为值,不是地址。

sort函数使用

标签:时间   结构   2.3   span   ios   php   程序   存储   输出   

原文地址:https://www.cnblogs.com/jasontodd/p/8550947.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!