priority_queue的内部实现是堆,本问介绍了如何利用优先级队列实现大顶堆,小顶堆,以及自定义数据类型的排列。
#include <iostream>
#include <queue>
using namespace std;
struct Node{
int val;
int priority;
Node(int val, int priority) {
this->val = val;
this->priority = priority;
}
friend bool operator <(Node node1, Node node2) {
// <: 从大到小
// >: 从小到大
return node1.priority<node2.priority;
}
};
int main(){
// less 从大到小
priority_queue<int, vector<int>, less<int>> bigHeap;
bigHeap.push(10);
bigHeap.push(20);
bigHeap.push(40);
bigHeap.push(0);
cout<<bigHeap.top()<<endl;
// greater 从小到大
priority_queue<int, vector<int>, greater<int>> smallHeap;
smallHeap.push(10);
smallHeap.push(20);
smallHeap.push(40);
smallHeap.push(0);
cout<<smallHeap.top()<<endl;
// 自定义数据类型,需要重载运算符 bool operator <
priority_queue<Node> myHeap;
Node node1(1,1);
Node node2(2,2);
Node node3(3,3);
Node node4(4,4);
myHeap.push(node1);
myHeap.push(node2);
myHeap.push(node3);
myHeap.push(node4);
cout<<myHeap.top().val<<endl;
}