C++ 堆
1、 堆
1.1 定义
堆(heaps)是一种特殊的二叉树,STL 中的priority_queue
容器适配器底层就是采用堆来组织数据存储的。
用来创建堆的函数定义在头文件 <algorithm>
中,max_heap()
对随机访问迭代器指定的一段元素重新排列,生成一个堆。默认使用的是<
运算符,可以生成一个大顶堆。例如:
# c++
vector<int> min= {2, 10, 3, 7, 8, 12, 1, 6};
make_heap(min.begin(), min.end(), greater<>());
printHeap(min); //1 6 2 7 8 12 3 10
min.push_back(4); //
printHeap(min); //1 6 2 7 8 12 3 10 4
push_heap(min.begin(), min.end(), greater<>());
printHeap(min); //1 4 2 6 8 12 3 10 7
# python
heap = [2, 10, 3, 7, 8, 12, 1, 6]
heapify(heap) # [1, 6, 2, 7, 8, 12, 3, 10]
heappush(heap, 0) # [0, 1, 2, 6, 8, 12, 3, 10, 7]
print(heappop(heap)) # 0 heap: [1, 6, 2, 7, 8, 12, 3, 10]
#include <iostream>
#include <algorithm>
#include <list>
#include <queue>
using namespace std;
#include <iomanip>
using std::setw;
void printHeap(vector<int> &v){
for(vector<int>::iterator it= v.begin();it!=v.end();++it){
cout<< *it <<" ";
}
cout<<"\n"<<endl;
}
int main(){
vector<int> min= {10,30,22,6,15,9};
make_heap(min.begin(), min.end(), greater<>());
printHeap(min); //6 10 9 30 15 22 20 仍为小顶堆
// queue<int>a;
priority_queue<int>a;
// priority_queue<int,vector<int>,greater<int> >a;
int n;
for(int i=0;i<6;i++){
a.push(min[i]);
}
while(!a.empty()){
cout<<a.top()<<endl;
a.pop();
}
return 0;
}