STL学习(4.5) heap的简单应用

什么是heap

即堆。一般来说大家第一次碰到这个东西都是在数据结构这门课上的。heap在STL中,底层由完全二叉树实现。heap在STL中并不是作为容器(数据结构)提供,而是作为操作的集合(算法)提供给我们。这个确实是最早没有想到了。博主当初搜STL中堆的时候,发现heap被整合在algorithm库中作为算法被使用的时候真的是一脸懵逼的(当初脑补是给个容器,自己加个泛型,push入堆top返回堆顶,美滋滋)。

所以,heap的使用是基于数个函数的,可以通过这些函数对一段内存的上的数据进行操作,从而使得这段内存上的数据变成用堆这个数据结构。同时用这些函数来维护这些数据。这段话不理解没关系,看一下后面的实例就能理解了。

heap与容器

heap不是容器,而是提供了一堆对堆进行操作的函数。也就是说,我们可以将一段数据构造成堆,但是每次对堆进行操作之前(调用push_heap、pop_heap等函数),必须先对数据容器进行操作,之后再使用这些函数对堆进行维护。例如,我们使用vector储存数据,现在要添加一个数据,先使用push_back()函数,然后在使用堆的push_heap()函数。所以说heap只是“维护”一个堆。而heap维护的目标,最好是vector等容器,不要使用数组,因为要持续删除、添加元素,数组会非常不方便。

堆的创建:make_heap

make_heap的使用跟sort是十分相似的,我们知道,sort的使用需要确定一段内存,例如:

int a[5] = {1,2,3,4,5};
sort(a,a+5);

创建堆亦然,因为也是要确定维护一段内存,所以方法相同:

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

using namespace std;

int main() {
	int a[5] = { 1,7,4,2,0 };
	vector<int> v(a,a+5);
	make_heap(v.begin(), v.end());

	system("pause");
	return 0;
}

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值