STL学习之heap & priority queue

heap,又称堆,在数据结构中,我们接触过最大堆max-heap,最小堆min-heap,这也都是heap,优先队列(priority queue)实际上也是heap来实现的。

Binary Heap是一种complete binary tree(完全二叉树),除了最底层叶子节点外,其他点都是满的,最底层叶子节点之间也不能有间隙,如下图就是一棵完全二叉树


将一棵完全二叉树映射成一个数组:
1.数组元素0作为一个标记位,不存实际的任何元素
2.对于处于数组下标 i 的元素,其左孩子(如果有的话),下标为2i;右孩子下标为2i + 1,父节点下标 [i/2]

所以用array就可以映射一个heap,因vector可动态扩展,所以用vector做底层存储会更合适一些。max-heap的最大值重总是在根基点,array的首元素;min-heap也类似。每次对heap的插入或pop都要调用一些算法(详见数据结构),保证操作之后,heap依然保持其特性。heap没有遍历功能,也不支持迭代器。

优先队列(priority queue)拥有权值的概念,它首先是一个queue,就需要满足底端入,顶端出的特性,但允许特定优先权的元素先出队列。

多数情况下优先队列是max-heap实现的,priority queue可以归为container adaptor。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值