优先级队列

基本概念:

优先级队列是一种常见的数据结构,在《STL源码剖析中》给出的定义是:priorty_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;

自己写一个优先级队列::

总结学习1:https://blog.csdn.net/LF_2016/article/details/52750174

总结学习2:https://blog.csdn.net/red_red_red/article/details/84559951

总结学习3:https://blog.csdn.net/char_m/article/details/105840872?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值