三 序列式容器(五)priority_queue(heap)(container adapter)

本文深入探讨了堆的数据结构及其应用,包括堆的概念、类别、算法和优先队列的实现。详细解释了min_heap和max_heap的工作原理,以及如何使用STL库中的heap算法。同时介绍了优先队列的核心接口及其在实际编程中的使用方法。

一 heap:

(1)heap概述:(heap是一种完全二叉树,这个完全二叉树满足堆的性质)

*heap不归属于STL容器组件,缺省情况下priority_queue利用一个max_heap来实现,max_heap以一个vector(或array)表现的complete binary tree实现。

*小技巧:vector的索引为0的位置保留,那么当complete binary tree中的某个节点位于vector的i处时,其左子节点必位于vector的2*i处,其右子结点必位于vector的2*i+1处,其父节点必位于“i/2”处。


(2)heap的类别:

*heap分为:min_heap和max_heap。

~min_heap:每个节点的键值都小于或等于其子节点的键值,最小值在根节点处,即位于vector的开头处。

~max_heap:每个节点的键值都大于或等于其子节点的键值,最大值在根节点处,即位于vector的开头处。

*STL供应的是max_heap。


(3)heap算法:(使用时需#include<algorithm>)

*push_heap(RandomAccessIterator first,RandomAccessIterator last)

*pop_heap(RandomAccessIterator first,RandomAccessIterator last)

*sort_heap(RandomAccessIterator first,RandomAccessIterator last)

*make_heap(RandomAccessIterator first,RandomAccessIterator last)


二 priority_queue(归类为container adapter)

(1)priority_queue概述:

*缺省情况下,priority_queue利用一个max_heap来实现,max_heap以一个vector表现的complete binary tree实现。

priority_queue没有迭代器,不提供遍历功能。


(2)priority_queue的核心接口:

*push():将一个元素置入priority_queue中。

*top():返回priority_queue中的“下一个元素”。

*pop():从priority_queue中移除一个元素。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值