STL的堆算法实现优先级队列

#include
#include
#include
using namespace std;
/*
利用STL堆算法实现的堆结构,优先级队列的底层就是大小堆
*/
class heap
{
public:
	heap(int *a = NULL, int n = 0) :vc(a, a + n), _size(n)
	{
		make_heap(vc.begin(), vc.end());//对【begin,end】的元素生成堆,重载版本使用自定义的比较操作
	}
	void insert(int val)//插入到最堆的最后一个位置,并进行从下往上堆调整。
	{
		vc.push_back(val);
		push_heap(vc.begin(), vc.end());//对插入新元素到末尾的序列再次生成堆。重载版本使用自定义的比较操作
	}
	void pop()//把堆顶的元素换到最末尾,并进行从上往下堆调整
	{
		pop_heap(vc.begin(), vc.end());//将堆顶元素交换到末尾后重新生成堆,重载版本使用自定义的比较操作
		cout << vc.back()<<"  ";
		vc.pop_back();//调用该函数pop末尾元素
	}
	void head_sort()
	{
		sort_heap(vc.begin(), vc.end());//使用该函数必须先make_heap从小到大排序。重载版本使用自定义的比较操作
	}
	void show()
	{
		for (int i = 0; i < vc.size();++i)
		{
			cout << vc[i] << "  ";
		}
		cout << endl;
	}
private:
	vector vc;
	int _size;
};

你可能感兴趣的:(数据结构,C/C++)