C++笔记之STL的sort使用第三个参数来自定义排序
code review!
文章目录
- C++笔记之STL的sort使用第三个参数来自定义排序
- 1.方法一:使用比较函数(其实是使用函数指针)作为std::sort()的第三个参数来排序
- 2.方法二:使用lambda表达式作为std::sort()的第三个参数来排序
- 3.方法三:使用函数对象(functors)作为std::sort()的第三个参数来排序
- 4.方法四:通过比较运算符(<、>等)操作符重载来进行自定义类型的排序
- 5.通过自定义比较函数实现复杂排序
1.方法一:使用比较函数(其实是使用函数指针)作为std::sort()的第三个参数来排序
2.方法二:使用lambda表达式作为std::sort()的第三个参数来排序
3.方法三:使用函数对象(functors)作为std::sort()的第三个参数来排序
4.方法四:通过比较运算符(<、>等)操作符重载来进行自定义类型的排序
在这个例子中,我们定义了Person类,并重载了<运算符,使得根据年龄进行排序。std::sort()会根据<运算符的定义来进行排序。请注意,如果需要自定义更复杂的排序规则,可以使用Lambda表达式或者函数对象(functors)作为std::sort()的第三个参数,来指定排序的规则。
5.通过自定义比较函数实现复杂排序
代码
#include <algorithm>
#include <iostream>
#include <vector>
struct struct_name {
int id;
float age;
};
static bool compare_age(
const struct_name &age1, const struct_name &age2) {
return age1.age < age2.age;
}
std::vector<struct_name> vect_1;
int main() {
struct_name struct_name1, struct_name2, struct_name3;
struct_name1.id = 1;
struct_name2.id = 2;
struct_name3.id = 3;
struct_name1.age = 21;
struct_name2.age = 18;
struct_name3.age = 23;
vect_1.emplace_back(struct_name1);
vect_1.emplace_back(struct_name2);
vect_1.emplace_back(struct_name3);
std::cout << "before sort!" << std::endl;
for (int i = 0; i < vect_1.size(); i++) {
std::cout << "vect_1.(id,age)= " << vect_1[i].id << " " << vect_1[i].age << std::endl;
}
std::sort(vect_1.begin(), vect_1.end(), compare_age);
std::cout << "after sort!" << std::endl;
for (int i = 0; i < vect_1.size(); i++) {
std::cout << "vect_1.(id,age)= " << vect_1[i].id << " " << vect_1[i].age << std::endl;
}
return 0;
}
运行