#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
struct Node { //结构体
int value;//值
int key; //编号
friend bool operator < (Node n1,Node n2) { //重载操作符,其中的<不能改变 friend bool operator < (){}
return n1.value < n2.value; //最大优先队列,类似的还有最小优先队列把小于改为大于
}
};
int main(){
//优先队列基本操作
//示例一:
priority_queue<int> pq1;//默认为大元素优先priority_queue<>
pq1.push(6);pq1.push(9);pq1.push(2);pq1.push(8);pq1.push(1);//入队列
while(!pq1.empty()){//判断是否为空
printf("%d ", pq1.top());//取队首
pq1.pop();//出队列
}
printf("\n");
//示例二:
priority_queue<int, vector<int>, greater<int> > pq2;;//小元素优先 priority_queue< , vector<>, greater<> >
pq2.push(6);pq2.push(9);pq2.push(2);pq2.push(8);pq2.push(1);//入队列
while(!pq2.empty()){//判断是否为空
printf("%d ", pq2.top());//取队首
pq2.pop();//出队列
}
printf("\n");
int i;
//示例三:
Node b[5];
b[0].value = 6; b[0].key = 1;
b[1].value = 9; b[1].key = 2;
b[2].value = 2; b[2].key = 3;
b[3].value = 8; b[3].key = 4;
b[4].value = 1; b[4].key = 5;
priority_queue<Node> Heap; //最大优先队列
for(i = 0;i < 5;i++){ //入队列
Heap.push(b[i]);
}
printf("最大优先队列:\n");
while(!Heap.empty()){ //出队列
printf("key:%d value:%d\n",Heap.top().key,Heap.top().value);
Heap.pop();
}
return 0;
}
关于优先队列(priority_queue)的使用
最新推荐文章于 2024-07-24 12:40:06 发布