用重载运算符实现最小堆:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
struct node{
int u,dis;
bool operator < (const struct node& b) const
{
return dis > b.dis;//以dis为关键字的最小堆。
}
};
int main()
{
priority_queue<node> pq;
struct node n1,n2,n3;
n1.u=1,n1.dis=5;
n2.u=2,n2.dis=8;
n3.u=3,n3.dis=1;
pq.push(n1);
pq.push(n2);
pq.push(n3);
printf("%d\n",pq.top().dis);
return 0;
}
默认最大堆:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
int main()
{ priority_queue<int> pq;//默认最大堆
pq.push(10);//插入元素
pq.push(5);
pq.push(35);
pq.pop();//删除顶部元素
printf("%d\n",pq.top());
return 0;
}
手动最大堆与最小堆
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
int main()
{
//priority_queue<int ,vector<int>,greater<int>>pq;//最小堆
priority_queue<int ,vector<int>,less<int>>pq;//最大堆
pq.push(10);//插入元素
pq.push(5);
pq.push(35);
pq.pop();//删除顶部元素
printf("%d\n",pq.top());
return 0;