堆,堆在C++中用法

19 篇文章 0 订阅
17 篇文章 1 订阅

Heap

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

C++中的用法

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

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

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/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值