📅  最后修改于: 2023-12-03 14:52:40.246000             🧑  作者: Mango
在C/C++中,可以使用STL库中的sort函数对日期数组进行排序。但是,由于STL默认的排序方式是按升序排序,而日期的大小并不是按照数值大小来比较的,所以我们需要自定义排序函数来实现按日期的大小进行排序。
在编写排序函数之前,我们首先需要定义一个日期结构体,用于存储年、月、日等信息。下面是一个示例的日期结构体定义:
typedef struct {
int year;
int month;
int day;
} Date;
自定义排序函数需要满足以下条件:
我们可以定义一个名为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函数,即可轻松地实现按日期的大小进行排序。