STL中的优先队列priority_queue的使用方法

在程序中包含                                                                                                                   #include<queue>#include<functional> 两个头文件

模板原型:

priority_queue<T,Sequence,Compare>

T:存放容器的元素类型

Sequence:实现优先级队列的底层容器,默认是vector<T>

Compare:用于实现优先级的比较函数,默认是functional中的less<T>

常用的操作如下:

empty() 如果优先队列为空,则返回真 
pop() 删除第一个元素 
push() 加入一个元素 
size() 返回优先队列中拥有的元素的个数 
top() 返回优先队列中有最高优先级的元素


但是在使用时必须注意:priority_queue放置元素时,不会判断元素是否重复。(因为在模板的第二个参数时顺序容器,不能保证元素的唯一性)

//STL中默认的是最大优先队列,声明时只要 priority_queue<int>q就行了
//如果是最小堆,麻烦一些priority_queue<int,vector<int>,cmp> q;当然也可以重载运算<
//看个例子
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<functional>
using namespace std;
struct mytype //自定义的一个类,要在类中重载小于符号
{
int value;
int pri;
bool operator<(const mytype b)
{
   return pri<b.pri;
}
};
struct cmp{ //还得再写一个类,用于实现优先级的比较函数,就是重载小括号。
bool operator ()(const mytype &a,const mytype &b){
return a.pri<b.pri;
}
};
int main()
{
priority_queue<mytype,vector<mytype>,cmp>q;
    srand(2);
for(int i=0;i<10;i++)
{
   int k=rand();
   mytype t;
   t.value=k;
   t.pri=i;
   q.push(t);
   cout<<"pri="<<i<<" value= "<<k<<endl;
}
cout<<endl;
for(int i=0;i<10;i++)
{
   mytype t=q.top();
   q.pop();
   cout<<"pri="<<t.pri<<" value= "<<t.value<<endl;
}

return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值