make_heap, push_heap, pop_heap, 的使用
来源:互联网 发布:java动态代理原理 编辑:程序博客网 时间:2024/06/08 07:33
stl make_heap使用
摘要:好久没有写blog,翻译一篇cplusplus上的make heap文档,凑凑数吧。在工程项目中有不少需求是多次求最大数或者最小数,堆是好的选择之一。如果我比较懒,又比较严谨的话,项目也允许使用stl的话,我会采用STL的make_heap, push_heap, pop_heap, sort_heap, 结合vector来完成需求。
- Make heap
根据随机迭代器first和last指定的范围[first,last)创建一个大顶堆(最大的元素*first在上面,也可以说在容器的front端)。大顶堆的性质是上面的元素总比其两个子节点元素大。在构造堆的过程中,第一个函数使用‘<’进行比较,第二个模板函数使用comp仿函数进行比较。
利用make_heap构造堆后,可以利用vector::push_back配合push_heap把一个元素添加到堆中,利用pop_heap和vector::pop_back删除堆顶的元素(再唠叨句:堆顶元素位于vector的front),仍然得到一个大顶堆。
- 例子
- 输出:
- Complexity
At most, (3*(last-first)) comparisons.
- push_heap
给定first和last的值,push_heap把last-1这个位置上的元素加入到堆中,最后[first,last)这个范围的元素仍然构成一个堆。
- Complexity
At most, log(last-first) comparisons.也就是堆高。从堆底往上调整。如果孩子比父亲大,跟父亲交换位置即可。
- pop_heap
把堆顶的元素移动到last-1的位置,然后调整堆,最后[first,last-1)仍然是一个堆。
- Complexity
At most, (2*log(last-first)) comparisons.堆顶元素走了,他的两个儿子比较,谁大谁上来,如此继续比较,直到堆底。因此是2倍的log(last-first)
- sort_heap
调整[first,last)返回的元素,即在容器vector中元素按照升序排列。注意[first,last)这个范围不在具有堆的性质。
- Complexity
At most, NlogN comparisons, where N is (last-first).每次把堆顶元素放到vector的last-1, last-2, …,每次move堆顶元素后,都要调整一次堆。
- make_heap, push_heap, pop_heap, 的使用
- make_heap(), pop_heap(), push_heap()用法
- make_heap(), pop_heap(), push_heap()用法
- C++中堆的应用:make_heap, pop_heap, push_heap, sort_heap, priority_queue
- priority_queue 调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法
- STL中heap相关函数的用法:make_heap,push_heap,pop_heap...
- C++中堆的应用:make_heap, pop_heap, push_heap, sort_heap
- STL中的make_heap、push_heap、pop_heap示例程序
- STL---heap概述,make_heap,sort_heap,pop_heap,push_heap。
- STL---heap概述,make_heap,sort_heap,pop_heap,push_heap
- STL---heap概述,make_heap,sort_heap,pop_heap,push_heap
- STL---heap概述,make_heap,sort_heap,pop_heap,push_heap。
- STL---heap概述,make_heap,sort_heap,pop_heap,push_heap
- c++ make_heap, pop_heap, push_heap, sort_heap详解
- C++ make_heap,push_heap,pop_heap,sort_heap(以最大的K个数为例)
- 【STL】Heap算法——push_heap、pop_heap、sort_heap、make_heap
- sort_heap后使用push_heap ,pop_heap异常
- 【优先队列】【堆】STL之priority_queue、make_heap()、push_heap()、pop_heap()、容器适配器
- USB UMS MTP设置过程
- HP Cloud Services Performance Test
- 作为开发者,你不应该害怕的 8 件事
- sqlite使用总结(一)搭建编译与使用环境
- GDAL1.9.2没有生成gdal19.pdb问题解决办法
- make_heap, push_heap, pop_heap, 的使用
- Ext4文件系统简介
- php正则匹配汉字!
- 批处理命令大全
- Android内核与主线linux内核的比较(Android对Linux内核的改动你知道多少?) .
- 关于HashCode和Equals的小结
- 两种图像缩放算法的对比与实现
- 一次大会分享及入职感受(记)
- warning C280: 'LampN': unreferenced local variable