lmjq12 @ 2023-10-24 21:00:02
#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
using namespace std;
int n;
struct body
{
string name;
int y, m, d,l;
}h[105];
bool cmp(body a, body b)
{
if (a.y != b.y) return a.y < a.y;
else
{
if (a.m != b.m) return a.m < a.m;
else if (a.m == b.m && a.d != b.d) return a.d < b.d;
else if (a.m == b.m && a.d == b.d) return a.l > b.l;
}
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> h[i].name >> h[i].y >> h[i].m >> h[i].d;
h[i].l = i;
}
stable_sort(h, h + n, cmp);
for (int i = 0; i < n; i++)
{
cout << h[i].name << endl;
}
return 0;
}
by only_a_speaker @ 2023-10-24 21:09:35
您好,在比较函数中,请勿将 a
自己的年份与自己比较。
同时,由于您的比较函数已经唯一确定了元素间的大小顺序,所以此处 stable_sort
是不必要的,直接使用 sort
为最佳。
另外还需注意,在比较函数里的判断存在冗余判断。例如,在已经判断完月份不等之后,在另一分支还在判断月份相等,这是不必要的。
by lmjq12 @ 2023-10-24 21:35:36
@only_a_speaker 多谢大佬