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

📅  最后修改于: 2023-12-03 15:08:51.826000             🧑  作者: Mango

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

在C/C++中,我们可以使用 std::sort() 对日期数组进行排序。但是由于日期本身是一种复合的数据类型,无法直接进行排序,因此需要先实现一个比较函数或者比较符号。

下面是一个基于比较函数的排序示例:

#include <iostream>
#include <algorithm>

using namespace std;

// 定义日期结构体
struct Date {
    int year;
    int month;
    int day;
};

// 日期比较函数
bool cmp(const Date& a, const Date& b)
{
    if (a.year != b.year) {
        return a.year < b.year;
    } else if (a.month != b.month) {
        return a.month < b.month;
    } else {
        return a.day < b.day;
    }
}

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

    // 排序
    sort(dates, dates + n, cmp);

    // 输出排序结果
    for (int i = 0; i < n; i++) {
        cout << dates[i].year << "-" << dates[i].month << "-" << dates[i].day << endl;
    }

    return 0;
}

上述代码中,我们定义了一个 Date 结构体来表示日期,然后实现了一个 cmp() 比较函数,用于比较两个日期的大小关系。在主函数中,我们先定义一个 dates 数组,然后使用 std::sort() 函数对其进行排序,最后输出排序结果。

还可以使用 C++11 的 lamdba 表达式来替代 cmp() 函数,使代码更为简洁:

sort(dates, dates + n, [](const Date& a, const Date& b) {
    if (a.year != b.year) {
        return a.year < b.year;
    } else if (a.month != b.month) {
        return a.month < b.month;
    } else {
        return a.day < b.day;
    }
});

除了使用比较函数外,我们还可以重载日期类的比较符号来实现日期数组排序,这里不再赘述。