📌  相关文章
📜  如何在C C++中对日期数组进行排序?(1)

📅  最后修改于: 2023-12-03 14:52:40.246000             🧑  作者: Mango

如何在C/C++中对日期数组进行排序?

在C/C++中,可以使用STL库中的sort函数对日期数组进行排序。但是,由于STL默认的排序方式是按升序排序,而日期的大小并不是按照数值大小来比较的,所以我们需要自定义排序函数来实现按日期的大小进行排序。

准备工作:定义日期结构体

在编写排序函数之前,我们首先需要定义一个日期结构体,用于存储年、月、日等信息。下面是一个示例的日期结构体定义:

typedef struct {
    int year;
    int month;
    int day;
} Date;
自定义排序函数

自定义排序函数需要满足以下条件:

  1. 函数返回值为bool类型,表示两个元素的大小比较结果:true表示前一个元素比后一个元素小,false则相反。
  2. 函数有两个参数,分别表示要比较的两个元素。

我们可以定义一个名为datecmp的函数来对日期进行比较。该函数的实现如下:

bool datecmp(const Date& d1, const Date& d2) {
    if (d1.year < d2.year) {
        return true;
    }
    else if (d1.year > d2.year) {
        return false;
    }
    else {  // 年份相同,比较月份和日期
        if (d1.month < d2.month) {
            return true;
        }
        else if (d1.month > d2.month) {
            return false;
        }
        else {
            return d1.day < d2.day;
        }
    }
}

在该函数中,我们首先比较两个日期的年份,如果第一个日期的年份小于第二个日期的年份,则返回true;反之,则返回false。如果两个日期的年份相同,则比较月份和日期。

在主函数中调用排序函数

接下来,在主函数中定义一个日期数组,然后调用STL库中的sort函数对该数组进行排序,同时指定使用datecmp()函数来比较元素的大小。示例代码如下:

#include <iostream>
#include <algorithm>

using namespace std;

typedef struct {
    int year;
    int month;
    int day;
} Date;

bool datecmp(const Date& d1, const Date& d2) {
    if (d1.year < d2.year) {
        return true;
    }
    else if (d1.year > d2.year) {
        return false;
    }
    else {  // 年份相同,比较月份和日期
        if (d1.month < d2.month) {
            return true;
        }
        else if (d1.month > d2.month) {
            return false;
        }
        else {
            return d1.day < d2.day;
        }
    }
}

int main() {
    Date dates[] = {
        {2021, 9, 27},
        {2020, 12, 31},
        {2021, 1, 1},
        {2021, 9, 28},
        {2020, 1, 1}
    };
    int n = sizeof(dates) / sizeof(Date);

    sort(dates, dates + n, datecmp);

    for (int i = 0; i < n; i++) {
        cout << dates[i].year << "-" << dates[i].month << "-" << dates[i].day << endl;
    }

    return 0;
}

运行该程序,输出结果如下:

2020-1-1
2020-12-31
2021-1-1
2021-9-27
2021-9-28
总结

在C/C++中,可以使用自定义排序函数来对日期数组进行排序。通过定义一个日期结构体和一个日期比较函数,再利用STL库中的sort函数,即可轻松地实现按日期的大小进行排序。