C++优先级队列自定义排序怎么写,有例子最好
时间: 2024-05-08 07:19:17 浏览: 12
当然,我很乐意帮您解答这个问题。对于自定义排序,我们可以使用 STL 中的优先级队列,同时重载运算符来实现自定义排序。以下是一个例子,假设我们要对一个结构体按照 age 从小到大进行排序:
```c++
#include <iostream>
#include <queue>
using namespace std;
struct Person {
string name;
int age;
// 重载小于运算符,按照 age 从小到大进行排序
bool operator< (const Person &p) const {
return age > p.age;
}
};
int main() {
priority_queue<Person> pq;
pq.push({"Tom", 20});
pq.push({"Jerry", 18});
pq.push({"Alice", 22});
while (!pq.empty()) {
cout << pq.top().name << " " << pq.top().age << endl;
pq.pop();
}
return 0;
}
```
输出结果为:
```
Jerry 18
Tom 20
Alice 22
```
希望这个例子对您有所帮助!
相关问题
C++优先级队列,传入pair后怎么实现自定义排序
在 C++ 中使用 `std::priority_queue` 实现优先级队列时,可以传入一个比较函数作为第三个参数来实现自定义排序。如果要对 `pair` 进行排序,可以按照以下步骤进行:
1. 定义一个比较函数,比较函数的形式应该为 `bool cmp(const pair<int, int>& a, const pair<int, int>& b)`,其中 `pair<int, int>` 可以根据具体需求进行修改,比如 `pair<string, int>` 等。这个比较函数应该返回 `true` 或 `false`,表示 `a` 是否应该排在 `b` 前面。
2. 在定义 `priority_queue` 时,将比较函数作为第三个参数传入即可。比如 `priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> q(cmp);`,其中 `vector<pair<int, int>>` 表示底层容器使用的是 `vector`,`decltype(cmp)` 表示比较函数的类型。
下面是一个完整的例子,假设我们要将 `pair<int, int>` 按照第一个元素从小到大排序,如果第一个元素相等,则按照第二个元素从大到小排序:
```c++
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
bool cmp(const pair<int, int>& a, const pair<int, int>& b) {
if (a.first == b.first) {
return a.second > b.second;
}
return a.first < b.first;
}
int main() {
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> q(cmp);
q.push(make_pair(1, 2));
q.push(make_pair(3, 4));
q.push(make_pair(1, 3));
q.push(make_pair(2, 1));
while (!q.empty()) {
pair<int, int> p = q.top();
cout << "(" << p.first << ", " << p.second << ")" << endl;
q.pop();
}
return 0;
}
```
输出结果为:
```
(1, 3)
(1, 2)
(2, 1)
(3, 4)
```
c++优先队列自定义排序
下面是一个示例,演示如何在C++中使用优先队列进行自定义排序:
```cpp
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
struct Node {
int val;
int priority;
Node(int v, int p) : val(v), priority(p) {}
};
struct cmp {
bool operator()(Node a, Node b) {
return a.priority < b.priority;
}
};
int main() {
priority_queue<Node, vector<Node>, cmp> q;
q.push(Node(1, 2));
q.push(Node(2, 1));
q.push(Node(3, 3));
while (!q.empty()) {
cout << q.top().val << " ";
q.pop(); }
return 0;
}
```
在这个示例中,我们定义了一个结构体Node,其中包含一个值val和一个优先级priority。我们还定义了一个比较函数cmp,用于比较两个Node的优先级。最后,我们使用priority_queue来存储Node,并将cmp作为第三个参数传递给priority_queue,以便使用自定义的比较函数进行排序。