定义:priority_queue<int>pq;
操作:
pq.empty() 如果队列为空返回真
pq.pop() 删除对顶元素
pq.push() 加入一个元素
pq.size() 返回优先队列中拥有的元素个数
pq.top() 返回优先队列对顶元素
下面我们介绍几种优先队列的定义方式:
)struct cmp1{
bool operator ()(int &a,int &b){
return a>b;//最小值优先
}
};
struct cmp2{
bool operator ()(int &a,int &b){
return a<b;//最大值优先
}
}; struct node //自定义类型优先级设定
{
friend bool operator< (node n1, node n2)//重载小于号,,不要重载大于号,可能报错
{
return n1.priority < n2.priority;// (priority)大的优先级高
}
int priority;
int value;
}; #include <queue>
#include <vector>
#include <stdio.h>
//#include <functional.h>
using namespace std;
struct cmp1
{
bool operator ()(int &a,int &b)
{
return a>b;//最小值优先
}
};
struct cmp2
{
bool operator ()(int &a,int &b)
{
return a<b;//最大值优先
}
};
struct node //自定义类型优先级设定
{
friend bool operator< (node n1, node n2)//重载小于号,,不要重载大于号,可能报错
{
return n1.priority < n2.priority;// (priority)大的优先级高
}
int priority;
int value;
};
int main()
{
int a[6]={1,5,2,8,6,3};
printf("最大值优先模板:\n");
priority_queue<int>pq0;
for(int i=0;i<6;i++)
{
pq0.push(a[i]);
}
for(int i=0;i<6;i++)
{
printf("%d ",pq0.top());
pq0.pop();
}
printf("\n");
printf("最大值优先自定义\n");
priority_queue<int,vector<int>,cmp2 >pq2;
for(int i=0;i<6;i++)
{
pq2.push(a[i]);
}
for(int i=0;i<6;i++)
{
printf("%d ",pq2.top());
pq2.pop();
}
printf("\n");
printf("最小值优先模板:\n");
priority_queue<int,vector<int>,greater<int> >pq3;//注意这里两个> >之间有空格否则编译器会报错g++
for(int i=0;i<6;i++)
{
pq3.push(a[i]);
}
for(int i=0;i<6;i++)
{
printf("%d ",pq3.top());
pq3.pop();
}
printf("\n");
priority_queue<int,vector<int>,cmp1 >pq;
printf("最小值优先自定义:\n");
for(int i=0;i<6;i++)
{
pq.push(a[i]);
}
for(int i=0;i<6;i++)
{
printf("%d ",pq.top());
pq.pop();
}
printf("\n");
printf("自定义类型优先级:\n");
priority_queue<node> pq4;
node b[5];
b[0].priority = 6; b[0].value = 1;
b[1].priority = 9; b[1].value = 5;
b[2].priority = 2; b[2].value = 3;
b[3].priority = 8; b[3].value = 2;
b[4].priority = 1; b[4].value = 4;
for(int i=0;i<5;i++)
{
pq4.push(b[i]);
}
printf("优先级 值\n");
for(int i=0;i<5;i++)
{
printf("%d\t%d\n",pq4.top().priority,pq4.top().value);
pq4.pop();
}
return 0;
}(如有错误,欢迎指正,转载请注明出处)原文地址:http://blog.csdn.net/chaiwenjun000/article/details/45457125