容器适配器————heap

Posted pacino12134

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容器适配器————heap相关的知识,希望对你有一定的参考价值。

堆(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)

 

以上是关于容器适配器————heap的主要内容,如果未能解决你的问题,请参考以下文章

STL源码剖析 学习笔记

STL源码分析之heap和priority_queue

C++ STL容器适配器 内容详解

容器适配器---queuestackpriority_queue

C++ STL教程(13)容器适配器使用

STL之stack等容器适配器