heap —— 堆

1、C++ STL中的 heap(堆)数据结构是一棵完全二叉树。在标准库中heap算法是在 algorithm 头文件中,提供了如下的几个操作的函数。

以下函数默认的第三个参数都是最大堆时的参数。若要使用最小堆,则需要显式的将第三个参数设为greater

  • make_heap():根据指定的迭代器区间,来创建一个堆。
vector<int> v = { 10,20,5,60 };

// 创建最大堆,默认是创建最大堆。该堆的最大元素为二叉树根节点的元素 v[0]或v.front()
make_heap(v.begin(), v.end(), less<int>());
// 创建最小堆,该堆中根节点的元素最小
make_heap(v.begin(), v.end(), greater<int>());

  • push_heap():把指定迭代区间的最后一个元素插入到heap中,常常和vector配合使用。
v.push_back(100);
push_heap(v.begin(), v.end(),less<int>()); //将容器末尾的值插入到堆的合适位置.

  • pop_heap:将指定迭代区中的最后一个元素置于容器的末尾
// 将最大堆中的根节点元素置于容器的尾部,并未删除
pop_heap(v.begin(), v.end(), less<int>()); 
v.pop_back();//删除容器末尾的元素。

  • sort_heap:进行堆排序

2、示例代码如下

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int main()
{
	int arr[] = { 10,20,3,40,18 };
	int len = sizeof(arr) / sizeof(arr[0]);
	vector<int> vec(arr, arr + len); //用数组来初始化容器

	make_heap(vec.begin(), vec.end()); //以容器vec中的元素来建立堆,默认是最大堆
	cout << "The max heap: " << vec.front() << '\n';// 首元素为容器中的最大值

	pop_heap(vec.begin(), vec.end());//将迭代器区间中的最大元素置于vector容器的末尾
	vec.pop_back();//将此最大值删除
	cout << "max heap after pop: " << vec.front() << '\n';

	vec.push_back(99);//向容器末尾插入值
	push_heap(vec.begin(), vec.end());//将指定区间的最后一个元素插入到heap中
	cout << "max heap after push: " << vec.front() << '\n';

	sort_heap(vec.begin(), vec.end());//对堆进行排序

	cout << "final sorted range: ";
	for (auto &i:vec)
	{
		cout << i << " ";
	}

	cout << endl;
	system("pause");


}

输出结果如下:
在这里插入图片描述


参考资料:
STL——heap结构及算法
make_heap
C++ 标准库中的堆(heap)
STL中heap相关函数

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值