C++标准库中的堆-heap

make_heap函数,包括两个参数(begin(number),end(number)).(左闭右开)

pop_heap函数,包括两个参数,起始位置和终止位置,将当前区间的首位(也就是当前区间最大放在)end的位置。

push_heap函数,包括两个参数,起始位置和终止位置,将当前区间的最后一个元素插入到堆中。

sort_heap函数,包括两个参数,起始位置和终止位置,多次调用make_heap函数和pop_heap函数,实现最终对整个区间进行排序(注意调用之前需要先调用一次make_heap函数)。

is_heap函数,包括两个参数,起始位置和终止位置,判断当前的区间是否满足大顶堆,如果满足输出1,否则输出0。

is_heap_until函数,返回的是第一个不满足二叉堆的迭代器。

第一个参数代表起始位置,第二个参数代表结束位置。

每一次调用都是把当前区间内的最大值放在这个区间的最前面,就是堆排序的感觉。然后每排完一次序,我们可以将头部元素弹出。库函数 pop_head(begin(number),end(number)).这个时候,最大值被移动到了end的位置。

示例代码:

 #include<bits/stdc++.h>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn = 2e5+;
int a[maxn];
vector<int>q;
int main(){
for(int i=;i<=;i++){
q.push_back(i);
}
int n=;
for(int i=;i<=;i++){
make_heap(q.begin(),q.begin()+q.size()-n);
for(int j=;j<q.size();j++){
if(j==)cout<<q[j];
else cout<<" "<<q[j];
}
cout<<endl;
pop_heap(q.begin(),q.begin()+q.size()-n);
n++;
}
return ;
}

vector

sort_heap函数。

 #include<bits/stdc++.h>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn = 2e5+;
int a[maxn];
vector<int>q;
int main()
{
for(int i=; i<=; i+=)
{
q.push_back(i);
}
// make_heap(q.begin(),q.begin()+q.size());
q.push_back();
make_heap(q.begin(),q.end());
for(int j=; j<q.size(); j++)
{
if(j==)
cout<<q[j];
else
cout<<" "<<q[j];
}
cout<<endl;
sort_heap(q.begin(),q.end());
for(int j=; j<q.size(); j++)
{
if(j==)
cout<<q[j];
else
cout<<" "<<q[j];
}
cout<<endl;
return ;
}

is_heap函数。

 #include<bits/stdc++.h>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn = 2e5+;
int a[maxn];
vector<int>q;
int main()
{
for(int i=; i<=; i+=)
{
q.push_back(i);
}
for_each(q.begin(),q.end(),[](int i){cout<<" "<<i<<endl;});
// make_heap(q.begin(),q.begin()+q.size());
q.push_back();
make_heap(q.begin(),q.end());
sort_heap(q.begin(),q.end());
int flag=is_heap(q.begin(),q.end());
cout<<flag<<endl;
return ;
}

is_heap_until函数。

 #include<bits/stdc++.h>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn = 2e5+;
int a[maxn];
vector<int>q;
int main()
{
for(int i=; i<=; i+=)
{
q.push_back(i);
}
for_each(q.begin(),q.end(),[](int i){cout<<" "<<i<<endl;});
// make_heap(q.begin(),q.begin()+q.size());
q.push_back();
// make_heap(q.begin(),q.end());
// sort_heap(q.begin(),q.end());
auto flag=is_heap_until(q.begin(),q.end());
cout<<*flag<<endl;
return ;
}

 

小总结:

pop_heap,push_heap,sort_heap函数都需要在make_heap函数的前提下使用。

STL之heap学习的更多相关文章

  1. L2-012. 关于堆的判断(STL中heap)

    L2-012. 关于堆的判断   将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: “x is the root”:x是根结点: “x and y ...

  2. stl源码学习(版本2.91)--list

    stl源码学习(版本2.91)--list 一,阅读list()构造函数的收获 1,默认构造函数的作用和被调用的时机 struct no{ no(int i){} //no(){ // std::co ...

  3. C++STL标准库学习笔记(三)multiset

    C++STL标准库学习笔记(三)multiset STL中的平衡二叉树数据结构 前言: 在这个笔记中,我把大多数代码都加了注释,我的一些想法和注解用蓝色字体标记了出来,重点和需要关注的地方用红色字体标 ...

  4. STL源码学习----lower_bound和upper_bound算法

    转自:http://www.cnblogs.com/cobbliu/archive/2012/05/21/2512249.html 先贴一下自己的二分代码: #include <cstdio&g ...

  5. STL源码学习----lower_bound和upper_bound算法[转]

    STL中的每个算法都非常精妙,接下来的几天我想集中学习一下STL中的算法. ForwardIter lower_bound(ForwardIter first, ForwardIter last,co ...

  6. 【STL源码学习】STL算法学习之三

    第一章:前言 数量不多,用到的时候会很爽. 第二章:明细 STL算法中的又一个分类:分割:将已有元素按照既定规则分割成两部分.  is_partitioned 函数原型: template <c ...

  7. 【STL源码学习】STL算法学习之二

    第一章:前言 学习笔记,记录学习STL算法的一些个人所得,在以后想用的时候可以快速拾起. 第二章:明细 copy 函数原型: template <class InputIterator, cla ...

  8. 【STL源码学习】STL算法学习之一

    第一章:引子 STL包含的算法头文件有三个:<algorithm><numeric><functional>,其中最大最常用的是<algorithm>, ...

  9. 【STL源码学习】细品vector

    第一节:vector简介 vector是一种典型的类模板,使用的时候必须进行实例化. vector的数据存储在数组上,支持随机访问迭代器,支持下标操作[]和at操作,支持手动扩容和自动容量增长. ve ...

随机推荐

  1. qrcode.js 动态生成二维码

    用qrcode.js动态生成二维码图片非常简单,只需要引入qrcode.js即可使用,而且可以自定义图片大小.背景色等信息. 1.jsp代码---页面头部引入qrcode.js,jquery文件可选 ...

  2. Mysql中INSERT ... ON DUPLICATE KEY UPDATE的实践

    转: Mysql中INSERT ... ON DUPLICATE KEY UPDATE的实践 阿里加多 0.1 2018.03.23 17:19* 字数 492 阅读 2613评论 2喜欢 1 一.前 ...

  3. io系列之其他事项

    二.对IO异常的处理. io操作中,只要涉及到底层操作的就必须进行 io异常处理. IOException 是IO操作中必须处理的异常. 示例: class IOExceptionTest { pub ...

  4. 3 字节的 UTF-8 序列的字节 2 无效

    由于目前写完了[消息队列]模块,想做个单元测试,所以就利用spring的import标签,将mq的配置文件加入了配置.结果出现了<3 字节的 UTF-8 序列的字节 2 无效>这个问题. ...

  5. java的抽象方法

    抽象类所起的功能就像定义模板的功能,子类必须继承抽象类,因此不能用final修饰 http://blog.csdn.net/wei_zhi/article/details/52736350 抽象类的函 ...

  6. POJ 2112 Optimal Milking (Dinic + Floyd + 二分)

    Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 19456   Accepted: 6947 ...

  7. 随机数Random

    掷骰子10次,统计1.2出现的次数 public static void Main(string[] args) { ,a2=; Random random=new Random();//创建随机数对 ...

  8. (点到线段的最短距离)51nod1298 圆与三角形

    1298 圆与三角形 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0).   收起 ...

  9. 【优秀的素材收藏管理工具】Inboard for Mac 1.1

    [简介] Inboard 1.1 版本,Inboard 是一款Mac上强大的设计素材管理器,Inboard功能简洁实用,是设计师必备的一款软件,集成Dribbble,支持从 Safari.Chrome ...

  10. Spring Cloud构建微服务架构(六)高可用服务注册中心

    http://blog.didispace.com/springcloud6/ https://www.jianshu.com/p/df9393755a05 http://www.ityouknow. ...