priority_queue

priority_queue又称为优先队列,其底层是用来进行实现的。在优先队列中,队首元素一定是当前队列中优先级最高的那一个。

当然,可以在任何时候往优先队列里面加入(push)元素,而优先队列底层的数据结构堆(heap)会随时调整结构,使得每次的队首元素都是优先级最大的。

定义:priority_queue<typename> name;

和队列不一样的是,优先队列没有front()和back()函数,而只能通过top()函数来访问队首元素。

(1)push()

(2)top():可以获得队首元素(即堆顶元素)

(3)pop():队首元素(即堆顶元素)出队


(4)empty():和queue一样

(5)size():


priority_queue优先级的设置:

下面介绍基本数据类型和结构体类型的优先级设置方法

①基本数据类型的优先级设置

priority_queue<int, vector<int>, less<int> > q;         //less<int>表示数字大的优先级越大,而greater<int>表示数字小的优先级越大

priority_queue<int, vector<int>, greater<int> > q;    //vector<int>是用来承载底层数据结构堆(heap)的容器


②结构体的优先级设置


完整示例:


此处小于号的重载于排序函数sort中的cmp函数有些类似。事实上,两者的作用确实是类似的,只不过效果看上去似乎是“相反”的。在排序中,如果是“return f1.price > f2.price”,那么则是按价格从高到低排序,但是在优先队列中却是把价格低的放到队首。原因在于,优先队列本身默认的规则就是优先级高的放在队首,因此把小于号重载为大于号的功能时只是把这个规则反向了一下。如果读者无法理解,那么不妨记住,优先队列的这个函数与sort中的cmp函数的效果是相反的。


有没有办法跟sort中的cmp函数那样写在结构体外面呢?

自然是有办法的,只需把friend去掉,把小于号改成一对小括号,再把重载的函数写在结构体外面,同时将其用struct包装起来。


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • queue 先进先出容器这一块在数据结构中详细介绍 不作具体累述 定义 queue的访问 由于队列本身就是一种先进...
    荷包蛋要三分熟阅读 249评论 0 0
  • priority_queue 优先队列,其底层是用堆来实现的。在优先队列中,队首元素一定是当前队列中优先级最高的那...
    小幸运Q阅读 282评论 0 0
  • 1、Queue的使用(FIFO)(使用LinkedList实现) Queue使用时要尽量避免Collection的...
    暑水阅读 543评论 0 0
  • (1)queue和priority_queue的区别 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队...
    __bba3阅读 963评论 0 0
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    余生动听阅读 10,911评论 0 11

友情链接更多精彩内容