请举个例子排序函数指针
时间: 2023-07-26 12:14:48 浏览: 90
假设有一个整数数组 `arr`,我们可以按照从大到小的顺序对其进行排序。下面是一个使用排序函数指针进行排序的例子:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(int a, int b) {
return a > b;
}
int main() {
vector<int> arr = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
sort(arr.begin(), arr.end(), cmp);
for (auto& x : arr) {
cout << x << " ";
}
cout << endl;
return 0;
}
```
在上面的例子中,我们定义了一个比较函数 `cmp`,它的功能是比较两个整数的大小,返回值为 `true` 表示第一个整数比第二个整数大。在 `main()` 函数中,我们通过 `sort` 函数对 `arr` 进行排序,其中第三个参数为指向 `cmp` 函数的指针,表示按照 `cmp` 函数的规则对 `arr` 进行排序。最终输出的结果是 `9 6 5 5 5 4 3 3 2 1 1`,满足从大到小的要求。
相关问题
请举个例子排序函数对象的成员函数指针:
假设有一个类 `Person`,其中有两个成员变量 `name` 和 `age`,我们可以按照年龄从小到大对一组 `Person` 对象进行排序。下面是一个使用排序函数对象的成员函数指针进行排序的例子:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Person {
public:
string name;
int age;
Person(string n, int a) : name(n), age(a) {}
};
class Compare {
public:
bool operator()(const Person& p1, const Person& p2) const {
return p1.age < p2.age;
}
};
int main() {
vector<Person> people = {{"Alice", 25}, {"Bob", 30}, {"Charlie", 20}};
Compare c;
bool (Compare::*comp)(const Person&, const Person&) const = &Compare::operator();
sort(people.begin(), people.end(), c.*comp);
for (auto& p : people) {
cout << p.name << " " << p.age << endl;
}
return 0;
}
```
在上面的例子中,我们定义了一个比较函数对象 `Compare`,其中 `operator()` 是比较两个 `Person` 对象的函数。在 `main()` 函数中,我们首先创建了一个 `Compare` 对象 `c`,然后定义了一个成员函数指针 `comp`,指向 `Compare` 类的 `operator()` 函数。最后,我们通过 `c.*comp` 的方式将成员函数指针传递给 `sort` 函数,从而实现了按照年龄从小到大对 `people` 进行排序。
阅读全文