sort函数使用

Posted jasontodd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sort函数使用相关的知识,希望对你有一定的参考价值。

  

问题 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函数使用的主要内容,如果未能解决你的问题,请参考以下文章

代码片段 - Golang 实现集合操作

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

VSCode自定义代码片段——声明函数

VSCode自定义代码片段8——声明函数

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

关于数组的一些经常使用函数