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

17万+

被折叠的 条评论
为什么被折叠?



