heap(堆)
来源:互联网 发布:大数据采集软件 破解 编辑:程序博客网 时间:2024/06/05 20:30
STL里面的堆操作一般用到的只有4个。
分别是make_heap();pop_heap();push_heap();sort_heap();
他们的头文件是algorithm
1、make_heap();
函数原型是:
void make_heap(first_pointer,end_pointer,compare_function);
一个参数是数组或向量的头指针,第二个向量是尾指针。第三个参数是比较函数的名字。在缺省的时候,默认是大顶堆。(下面的参数都一样)
作用:把这一段的数组或向量做成一个堆的结构。范围是[first,last)
2、pop_heap();
函数原型是:
void pop_heap(first_pointer,end_pointer,compare_function);
作用:pop_heap()不是真的把最大(最小)的元素从堆中弹出来。而是重新排序堆。它
把first和last交换,然后将[first,last-1)的数据再做成一个堆。
3、push_heap()
函数原型是:
void pushheap(first_pointer,end_pointer,compare_function);
作用:push_heap()假设由[first,last-1)是一个有效的堆,然后,再把堆中的新元素加进来,做成一个堆。
4、sort_heap()
函数原型:
void sort_heap(first_pointer,end_pointer,compare_function);
作用:sort_heap对[first,last)中的序列进行排序。它假设这个序列是有效堆。(当然,经过排序之后就不是一个有效堆了)
//STL heap 堆 #include<iostream>#include<algorithm>#include<vector>using namespace std;bool cmp(int a,int b){return a>b;}int main(){int i; vector <int> v;for(int i=5;i>0;i--)v.push_back(i+2);make_heap(v.begin(),v.end(),cmp); //构建小顶堆 //结果是3、4、5、7、6 for(int i=0;i<5;i++)cout<<v[i]<<" ";cout<<endl;v.push_back(2);push_heap(v.begin(),v.end(),cmp); //加入2,重新建堆//结果是2、4、3、7、6、5 for(int i=0;i<6;i++)cout<<v[i]<<" ";cout<<endl;pop_heap(v.begin(),v.end(),cmp); //弹出元素 v.pop_back();//结果是:3、4、5、7、6for(int i=0;i<6;i++)cout<<v[i]<<" ";cout<<endl; sort_heap(v.begin(),v.end(),cmp); //对堆中元素排序//结果是:7,6,5,4,3for(int i=0;i<5;i++)cout<<v[i]<<" ";cout<<endl;return 0;}
- heap(堆)
- 堆(heap)
- 【数据结构】堆(heap)
- 堆(heap)笔记
- 数据结构-堆(heap)
- heap(堆)
- 【数据结构】堆(heap)
- 数据结构-堆(Heap)
- 数据结构-堆(heap)
- 堆(heap)
- 数据结构:堆(heap)
- 堆(heap)
- 堆排序(heap sort)
- 堆排序(Heap Sort)
- 堆(Heap)排序算法
- 堆(Heap)的实现
- 二叉堆(Binary heap)
- 堆排序(Heap-Sort)
- VS发布网站的时候,未能找到该文件
- 动态创建工作流
- MSYS2开发环境搭建 proxy
- PHP 实现汉字转化成拼音
- 如何清理Tomcat缓存
- heap(堆)
- JAVA异常层次结构
- CDN(内容分发网络)技术原理(转)
- 程序员面试金典: 9.13 C和C++ 13.6基类的析构函数为何要声明为virtual?
- android 五大布局之LinearLayout(线性布局)
- WEB前端常用的网站
- docker 无法挂载目录的经过
- 别被Express的API搞晕了
- 奖学金