c++ stl 堆算法 make_heap、push_heap、pop_heap、sort_heap使用方法

Heap可被视为一个以序列式集合实现而成的二叉树,具有两大性质:

1.第一个元素总是最大或最小

2.总是能够在对数时间内增加或移除一个元素

为了处理heap,STL提供了4个算法:

1.make_heap()将区间内的元素转化为heap.

2.push_heap()对heap增加一个元素.

3.pop_heap()对heap取出下一个元素.

4.sort_heap()对heap转化为一个已排序群集.


make_heap

c++ stl 堆算法 make_heap、push_heap、pop_heap、sort_heap使用方法_第1张图片
c++ stl 堆算法 make_heap、push_heap、pop_heap、sort_heap使用方法_第2张图片

push_heap

c++ stl 堆算法 make_heap、push_heap、pop_heap、sort_heap使用方法_第3张图片

pop_heap

c++ stl 堆算法 make_heap、push_heap、pop_heap、sort_heap使用方法_第4张图片

sort_heap

c++ stl 堆算法 make_heap、push_heap、pop_heap、sort_heap使用方法_第5张图片
c++ stl 堆算法 make_heap、push_heap、pop_heap、sort_heap使用方法_第6张图片

使用例子:

template<typename T>
inline void INSERT_ELEMENTS(T& coll, int first, int last)
{
	for (int i = first; i <= last; ++i)
	{
		coll.insert(coll.end(), i);
	}
}
template<typename T>
inline void PRINT_ELEMENTS(const T & coll, const string& optcstr = "")
{
	cout << optcstr;
	for (auto elem : coll)
	{
		cout << elem << ' ';
	}
	cout << endl;
}
int main()
{

	vector<int> a;
	INSERT_ELEMENTS(a, 3, 7);
	INSERT_ELEMENTS(a, 5, 9);
	INSERT_ELEMENTS(a, 1, 4);
	PRINT_ELEMENTS(a, "on entry:	");

	make_heap(a.begin(), a.end());
	PRINT_ELEMENTS(a, "after make_heap():	");

	pop_heap(a.begin(), a.end());
	a.pop_back();

	PRINT_ELEMENTS(a, "after pop_heap():	");
	a.push_back(17);
	push_heap(a.begin(), a.end());
	PRINT_ELEMENTS(a, "after push_heap():	");
	sort_heap(a.begin(), a.end());
	PRINT_ELEMENTS(a, "after sort_heap():	");
}

c++ stl 堆算法 make_heap、push_heap、pop_heap、sort_heap使用方法_第7张图片

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