堆(heaps)不是容器,而是一种特别的数据组织方式。堆一般用来保存序列容器。
堆是一个完全二叉树,每个节点与其子节点位置相对。父节点总是大于或等于子节点,这种情况下被叫作大顶堆,或者父节点总是小于或等于子节点,这种情况下叫作小顶堆。注意,给定父节点的子节点不一定按顺序排列。
创建堆
用来创建堆的函数定义在头文件 algorithm 中。max_heap() 对随机访问迭代器指定的一段元素重新排列,生成一个堆。默认使用的是 < 运算符,可以生成一个大顶堆。
make_heap(iterator first,iterator last);//将[first,last)范围进行堆排序,默认less<int>(),降序 make_heap(iterator first,iterator last,less<int>()); make_heap(iterator first,iterator last,greater<int>());//升序
堆操作
堆不是容器,而是组织容器元素的一种特别方式。只能确定堆的范围,即开始和结束迭代器指定的范围。这意味着可以用容器中的元素子序列创建堆。可以在已生成的堆中添加元素。
pop_heap()
将front移动到end前一位,即末尾,然后将剩下的元素重新堆排序成一个新heap,使用的规则要个make_heap一样。
pop_heap(iterator first ,iterator last, cmpObject);
push_heap()
对刚插入尾部push_back元素后做堆排序。
push_heap(iterator first ,iterator last, cmpObject)
sort_heap()
将一个堆做排序,最终成为一个有序的系列,可以看到sort_heap时,必须先是一个堆(两个特性:1、最大元素在第一个 2、添加或者删除元素以对数时间),因此必须先做一次make_heap。
sort_heap(iterator first ,iterator last, cmpObject)