std::sort如何自定义后面的比较函数
时间: 2024-10-20 10:10:53 浏览: 24
std::vector排序详解
4星 · 用户满意度95%
`std::sort` 函数允许你通过传递一个自定义的比较函数来改变其默认的排序顺序。在C++中,如果你有一个类(如`MySort`),并且想在其中的成员函数`comparePairs`中实现自定义排序逻辑,可以按照以下方式:
原始尝试[^1]中,你试图直接在`sort_fun`中使用`comparePairs`作为参数,但这样可能会导致错误,因为`sort`期望的是一个可以直接接受两个元素并返回布尔值(true表示第一个元素应排在第二个元素之前)的函数。
正确的做法是创建一个lambda表达式,该表达式内部调用了类的成员函数。这样做的原因是,`sort`函数内部无法直接访问外部类的成员,所以需要一个可以访问这些成员的闭包。
修改后的`sort_fun`方法应该是这样的:
```cpp
bool MySort::sort_fun(vector<PairType> vec) {
// 使用lambda表达式,这里a和b代表PairType类型的元素
auto sortLambda = [this](const PairType& p1, const PairType& p2) {
return this->comparePairs(p1, p2);
};
std::sort(vec.begin(), vec.end(), sortLambda);
}
```
这样,`sort`会根据`comparePairs`的定义来对`vec`中的`PairType`进行排序。注意这里的`this->`用于确保`comparePairs`能够访问到`MySort`类的实例。
阅读全文