📜  排序 C++ 中的比较器(1)

📅  最后修改于: 2023-12-03 15:39:49.745000             🧑  作者: Mango

排序 C++ 中的比较器

在 C++ 中,我们经常使用排序算法来对数组或 vector 等容器进行排序。这些排序算法都基于一个前提,就是能够比较容器中的元素大小,并以此进行排序。为此,我们需要实现一个比较器。

比较器的实现

比较器是一个函数或重载了运算符的对象,它能够比较容器中的两个元素的大小。比较器需要返回一个 bool 值,表示第一个元素是否小于(或大于)第二个元素。

以下是两个实现比较器的示例:

  1. 对于数组的实现:
bool compare(int a, int b) {
    return a < b;
}
  1. 对于结构体(或类)的实现:
struct Person {
    string name;
    int age;
};

bool cmp(const Person &a, const Person &b) {
    return a.age < b.age;
}
排序函数的使用

在使用排序函数时,需要将比较器作为第二个参数传递给排序函数。以下是标准库中的两个排序函数的使用方法:

  1. 对于数组的排序:
int arr[] = {5, 2, 1, 4, 3};
int n = sizeof(arr) / sizeof(arr[0]);

sort(arr, arr + n, compare); // 数组元素从 arr 到 arr+n-1
  1. 对于结构体(或类)的排序:
vector<Person> vec;
vec.push_back({"Alice", 25});
vec.push_back({"Bob", 20});

sort(vec.begin(), vec.end(), cmp);
lambda 表达式

在使用比较器时,有时我们只会在一处使用,因此不需要为它单独写一个函数或结构体。此时,我们可以使用 lambda 表达式来定义比较器。

以下是 lambda 表达式实现比较器的示例:

sort(v.begin(), v.end(), [](int a, int b) {
    return a < b;
});

以上 lambda 表达式等价于以下比较器函数:

bool compare(int a, int b) {
    return a < b;
}
总结

比较器是排序算法必备的,掌握比较器的使用可以让我们更加方便地进行排序操作。同时,lambda 表达式也提供了一种更加简单的比较器实现方式,可以大幅减少代码量。