C++STL堆操作


并没有什么用的更新时间

【2019/02/21】 第一次更新(疑似更完)
【2019/02/25】 相关链接更新


定义

优先队列
需要调动到#include<queue>,以下以a为例:
大根堆的调用:priority_queue<int>a;
小根堆的调用:priority_queue<int,vector<int>,greater<int> > a;


原因

以下以a为例:

a.size():返回堆内元素个数。
a.empty():如果堆为空,返回真,否则返回假。
a.top():返回堆顶元素。
a.pop():删除堆顶元素,自动整理。
a.push(x):插入一个元素x,自动整理。

某玄学方法

转载别人的博客 附上原文链接:https://blog.csdn.net/qq_41357771/article/details/79416127
这种方法速度很快,接近手写的堆,我也一直这么写,虽然稍微麻烦点,但是也麻烦不到哪里去。只需用到algorithm这个库。
定义: 类型 名称;例如 int hep[];就是定义一个数组就行了。
我们需要写两个函数。
void put(int x){
a[++len]=x;//len表示堆中元素个数
push_heap(a+1,a+1+len);//就像排序一样
}
int get(){
pop_heap(a+1,a+1+len);
//这个函数会将堆顶放到堆尾,所以后面是a[len–];
return a[len–];
}
其实就是排序一样的格式,注意这里也是大根堆,如果要小根堆,就讲堆中元素取反,然后取出时再取反就可以了,当然可以写cmp,或重载运算符。

相关链接

合并果子

猜你喜欢

转载自blog.csdn.net/qq_44618728/article/details/87865748