关于如何对结构体排序,自己做个小总结,方面以后查阅。
单项排序
#include <iostream>
#include <algorithm>
using namespace std;
struct s {
int a;
int b;
int c;
};
bool cmp(s s1, s s2) {
return s1.b < s2.b; //b小的在前面
}
s stu[4] = {{1, 2, 3}, {3, 1, 4}, {2, 2, 4}, {0, 2, 1}};
int main() {
sort(stu, stu + 4, cmp);
for (int i = 0; i < 4; i++) {
cout << stu[i].a << " " << stu[i].b << " " << stu[i].c << endl;
}
return 0;
}
/*
结果如下:
3 1 4
1 2 3
2 2 4
0 2 1
*/
可以看出,上述代码是对b进行从小到大排列,在b相同的情况下,则按坐标顺序从前到后输出。
多项排序
#include <iostream>
#include <algorithm>
using namespace std;
struct s {
int a;
int b;
int c;
};
bool cmp(s s1, s s2) {
//先比较b,若b相等再比较a,最后比较c
if (s1.b != s2.b) {
return s1.b < s2.b;
} else if (s1.a != s2.a) {
return s1.a < s2.a;
} else {
return s1.c < s2.c;
}
}
s stu[4] = {{1, 2, 3}, {3, 1, 4}, {2, 2, 4}, {0, 2, 1}};
int main() {
sort(stu, stu + 4, cmp);
for (int i = 0; i < 4; i++) {
cout << stu[i].a << " " << stu[i].b << " " << stu[i].c << endl;
}
return 0;
}
/*
结果如下:
3 1 4
0 2 1
1 2 3
2 2 4
*/