参考: 《STL源码剖析》
heap概述
heap并不归属于STL容器组件,它是个幕后英雄,扮演priority_queue的助手(底层实现)。所谓binary heap就是一种完全二叉树,也就是说,整颗binary tree除了最底层的叶子节点之外,是填满的,而最底层的叶节点由左至右又不得有空隙。
完全二叉树整棵树内没有任何节点漏洞,这带来一个好处:我们可以利用array来存储所有节点。假设我们动用一个小技巧,将array的#0元素保留(或设为无限大值或无限小值),那么完全二叉树中的某个节点位于array的i处时,其左子节点位于array的2i处,其右子节点位于array的2i+1处,其父节点位于“i/2".
最大堆max-heap:每个节点的键值(key)都大于或等于其子节点键值
最小堆min-heap:每个节点的键值(key)都小于或等于其子节点键值
heap算法
1)push_heap算法
新元素插入到底层vector的end()处,然后对最底端元素执行“上溯程序”。时间复杂度O(logN)。