C++(十二)优先级队列 Priority_queue

一、概念

  std::priority_queue 是 C++ 标准模板库(STL)中的一种适配器容器,用于实现优先队列数据结构。与普通的 std::queue 不同,std::priority_queue 中的元素会根据优先级排序,优先级最高的元素总是位于队列的前端(即可以通过 top() 函数访问到)。

        这是通过使用堆(通常是大堆)来实现的。 

通过上面的陈述可以了解到:进入priority_queue的数据会按一定规则——优先级排序。

那这是按照什么规则排序的呢? 

  • priority_queue 内部使用的是一种特殊的二叉树结构完全二叉树的结构,排序:大堆或者小堆(默认的大堆)

  • 大堆:每个节点的值都大于或等于其子节点的值(根节点是最大值)
  • 小堆:每个节点的值都小于或等于其子节点的值(根节点是最小值)

         因为二叉树是一个比较复杂且巧妙的内容,如果仔细介绍需要花费很大的篇幅,这里只是简单的一笔带过,想要了解更多的关于二叉树大堆小堆,建堆规则,向上调整向下调整等知识建议先系统学习数据结构:树部分。

priority_queue中的 top() 会是数值最大值或者最小值(大堆堆顶是最大值,小堆堆顶是最小值)

二、使用 

  了解priority_queue的底层结构之后,priority_queue的使用非常的简单!!

2.2 priority_queue类模板定义

priority_queue类的模板相较于queue是更复杂一点的,也是我们学习的难点:(源定义)

template<
    class T,
    class Container = std::vector<T>,
    class Compare = std::less<typename Container::value_type>
> 
class priority_queue{
 ... ... 
}

上面的源码中类模板给了缺省值:默认容器是vector,默认生成的是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值