C++ 自定义 sort() 排序规则
主要有3
种方法
- 通过
谓词函数
自定义排序规则
sort(pers.begin(), pers.end(), [&](const Person& lhs, const Person& rhs) {return lhs.height > rhs.height;});
- 通过
自定义比较函数
定义排序规则
sort(pers.begin(), pers.end(), myComp);
- 通过
声明比较类
定义排序规则
sort(pers.begin(), pers.end(), Comp());
示例代码如下
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
struct Person
{
string name;
int age;
int height;
};
bool myComp(const Person& lhs, const Person& rhs)
{
return lhs.height > rhs.height;
}
struct Comp
{
bool operator()(const Person& lhs, const Person& rhs)
{
return lhs.height > rhs.height;
}
};
int main()
{
Person p1 = { "lei", 18, 184 };
Person p2 = { "wang", 16, 175 };
Person p3 = { "guo", 20, 178 };
vector<Person> pers = { p1, p2, p3 };
cout << "排序前:" << endl;
for (const Person& per : pers)
{
cout << "name: " << per.name << "\t age: " << per.age << "\t height: " << per.height << endl;
}
// 用lambda表达式
// sort(pers.begin(), pers.end(), [&](const Person& lhs, const Person& rhs) {return lhs.height > rhs.height;});
// 用自定义比较函数
// sort(pers.begin(), pers.end(), myComp);
// 声明比较类
sort(pers.begin(), pers.end(), Comp());
cout << "排序后:" << endl;
for (const Person& per : pers)
{
cout << "name: " << per.name << "\t age: " << per.age << "\t height: " << per.height << endl;
}
return 0;
}
输出结果
排序前:
name: lei age: 18 height: 184
name: wang age: 16 height: 175
name: guo age: 20 height: 178
排序后:
name: lei age: 18 height: 184
name: guo age: 20 height: 178
name: wang age: 16 height: 175