📅  最后修改于: 2023-12-03 15:08:51.826000             🧑  作者: Mango
在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;
}
});
除了使用比较函数外,我们还可以重载日期类的比较符号来实现日期数组排序,这里不再赘述。