优先级队列的用法(基本)

简介:

优先级队列是一种常见的数据结构,在《STL源码剖析》中给出的定义是:priorty_queue是以个带权值观念的queue,它允许加入新元素,移除旧元素,审视元素值等功能。

由于这是一个queue,所以只允许在底端加入元素,并从顶端取出元素。 
但是优先级队列中的元素并非依照被推入队列的顺序排列。而是自动依照元素的权值排列。权值最高者排在最前面。 
缺省的情况下维护的是一个大堆,即权值以从高到低排列。

因为优先级队列的内部是用堆来维护,所以很多时候我们要使用堆的情况下会选择用优先级队列来代替

优先级队列的基本操作(其实就和一般的队列是一样的):

q.size();//返回q里元素个数
q.empty();//返回q是否为空,空则返回1,否则返回0
q.push(k);//在q的末尾插入k
q.pop();//删掉q的第一个元素
q.top();//返回q的第一个元素


 

 常见用法:

1.优先级判断默认使用<操作符,输出按权值从高到低顺序

int main()
{
    priority_queue<int> p1;//往队列里直接存入整型
    p1.push(5);
    p1.push(4);
    p1.push(6);
    p1.push(3);
    p1.push(1);
    for (int i = 0; !p1.empty(); ++i)
    {
        cout << p1.top() << " ";
        p1.pop();
    }
    return 0;
}

输出:

6 5 4 3 1

2.权值从低到高的顺序输出(greater优先队列)

priority_queue<int, vector<int>, greater<int> > q

第一个参数为元素的类型,第二个参数为容器类型,第三个参数为比较函数(默认为less),上面的为从小到大的优先级队列,如果将greater改为less或者删去第三个参数,即为权值从大到小排列。如图。注意greater包含在头文件functional内。 

对应的还有less 优先队列

priority_queue<int,vector<int>,less<int> >q;

这其实就和一开始的优先队列一样了,也是从权值大的开始输出 

3.对结构体进行操作

有时候我们想要往队列里存储结构体,那么为了实现和内置类型一样的优先级比较,我们就必须在结构体中实现对“<”的重载。因为优先级队列在内部实现调整的时候会去找“<”操作符,如果找不到就会报错。如下所示。

#include<queue>
using namespace std;
struct node{
	char s[15];
	int rank;
		friend bool operator < (node a,node b ){
			return  a.rank>b.rank;
		}
	};
priority_queue<node>q;

寻找大富翁(裸题)

The kth great number

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值