Heap
堆有最大堆与最小堆,也有对应的push
和pop
操作。在最大堆中,最大的元素在堆顶,pop
会将最大的元素推出, 最小堆则反之。
C++中的用法
C++中的堆,要基于向量使用。操作基于三个函数std::make_heap
,std::push_heap
,std::pop_heap
,并且要配合push_back
与pop_back
使用。需要#include <algorithm>
。
#include <algorithm>
using namespace std;
vector<int> v;
make_heap(v.begin(),v.end()); // 将vector转化为堆,默认为最大堆
v.push_back(99);
push_heap(v.begin(),v.end()); // 新元素先推入向量,再推入堆
pop_heap(v.begin(),v.end());
v.pop_back(); // 先推出堆,再推出向量
cout << v.front() << endl; // 堆顶元素用v.front()访问
值得注意的是最小堆的使用,初始化堆加入第三项make_heap(v.begin(),v.end(), greater<int>());
。不仅如此, 在push和pop的操作中也要加入greater<int>()
。
vector<int> v;
make_heap(v.begin(),v.end(), greater<int>());
v.push_back(99);
push_heap(v.begin(),v.end()), greater<int>();
pop_heap(v.begin(),v.end(), greater<int>());
v.pop_back();