使用priority_queue实现最小优先队列,以及实现最大优先队列
时间: 2023-10-20 14:20:51 浏览: 93
最小优先队列可以通过重载运算符实现。具体来说,可以定义一个结构体或类,其中包含一个元素值和一个优先级,然后重载小于号运算符,以便在插入元素时按照优先级排序。插入时使用 push() 函数,弹出元素时使用 pop() 函数即可实现最小优先队列。
示例代码:
```
struct Node {
int val;
int priority;
bool operator < (const Node& other) const {
return priority > other.priority; // 降序,越小的优先级越高
}
};
priority_queue<Node> pq;
pq.push({1, 2}); // 插入元素(值为1,优先级为2)
pq.push({2, 1}); // 插入元素(值为2,优先级为1)
pq.pop(); // 弹出 {2, 1}
pq.pop(); // 弹出 {1, 2}
```
最大优先队列可以通过同样的方式实现,只需要将小于号运算符改为大于号即可。
示例代码:
```
struct Node {
int val;
int priority;
bool operator < (const Node& other) const {
return priority < other.priority; // 升序,越大的优先级越高
}
};
priority_queue<Node> pq;
pq.push({1, 2}); // 插入元素(值为1,优先级为2)
pq.push({2, 1}); // 插入元素(值为2,优先级为1)
pq.pop(); // 弹出 {1, 2}
pq.pop(); // 弹出 {2, 1}
```
希望对你有所帮助!
阅读全文