堆,堆在C++中用法

Heap

堆有最大堆与最小堆,也有对应的pushpop操作。在最大堆中,最大的元素在堆顶,pop会将最大的元素推出, 最小堆则反之。

C++中的用法

C++中的堆,要基于向量使用。操作基于三个函数std::make_heapstd::push_heapstd::pop_heap,并且要配合push_backpop_back使用。需要#include

#include 
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());。不仅如此, 在push和pop的操作中也要加入greater()

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

Reference

http://www.cplusplus.com/reference/algorithm/make_heap/

你可能感兴趣的:(Coding,C++)