结构体重写排序
作者:
懒得理你
,
2024-03-20 23:03:05
,
所有人可见
,
阅读 13
1.重载运算符
struct MyStruct {
int id;
string name;
// ... 其他成员变量
bool operator<(const MyStruct& other) const {
return id < other.id; // 按照id字段升序排序
}
};
vector<MyStruct> structs = {...}; // 初始化一个结构体的容器
sort(structs.begin(), structs.end()); // 使用默认小于运算符进行排序
2.定义全局比较函数
struct MyStruct {
// ...
};
// 全局比较函数
bool compareById(const MyStruct& a, const MyStruct& b) {
return a.id < b.id;
}
vector<MyStruct> structs = {...};
sort(structs.begin(), structs.end(), compareById); // 使用自定义比较器按id排序
3.多条件排序
struct Student {
string name;
int age;
double grade;
// 多级排序,先按年龄升序,再按成绩降序
};
bool multiCompare(const Student& a, const Student& b) {
if (a.age != b.age) {
return a.age < b.age;
} else {
return a.grade > b.grade; // 注意这里使用大于号是因为成绩是降序排列
}
}
vector<Student> students = {...};
sort(students.begin(), students.end(), multiCompare);
4.Lambda表达式(C++11及以后)
vector<MyStruct> structs = {...};
sort(structs.begin(), structs.end(), [](const MyStruct& a, const MyStruct& b) {
return a.name < b.name; // 按照name字段升序排序
});