来自度娘的释义,堆的含义大概是这样的:

感性理解:

堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:
  • 堆中某个节点的值总是不大于或不小于其父节点的值;
  • 堆总是一棵完全二叉树。
将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。

理性理解:

堆的定义如下:
  n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。
  (ki <= k2i,ki <= k2i+1)或者(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4...n/2)

然而手写堆实在太困难有点长了,在NOIp&&NOI赛场上时间有限,所以一个模板的重要性不言而喻;(比如我排序向来都是sort

会手写堆的都是神犇!

真的!

反正我写不了2333

所以上帝为可爱的c++党准备了贴身的STL模板-->heap;

1.make_heap 构建堆

  默认用法 (但这样生成的是大根堆;如果需要构建小根堆,需要进行修改。

    Eg:

 vector<int> v{, , , , , };
make_heap(v.begin(), v.end());

  

  自建小根堆  

    Eg:自定义比较函数:(似乎是这样我并不太懂

 vector<int> v{, , , , , };
make_heap(v.begin(), v.end(), greater<int>());

    这里使用了greater<int>()来代替默认的less<int>()来创建int类型的heap。

    可以按层次遍历的顺序把这个heap画出来,可以看到它跟默认情况刚好相反,会是一个小顶堆。

2. push_heap 把指定区间的最后一个元素插入到堆中

  v.push_back();

push_heap(v.begin(), v.end());  

注意:需要满足的是此时的v必须满足是一个在区间(v.begin(), v.end())内满足堆的性质;不能直接比较23333

所以我一直觉得即使手写堆也可以使用模板

毕竟我不会写

这样就比较简单。

3. pop_heap 把指定区间的最后一个元素插入到堆中

比如这样:

pop_heap(v.begin(), v.end());

auto largest = v.back();

psln(largest);

v.pop_back();

依旧需要满足v是一个堆;

而且他会将除最大值以外的节点重排;而v.back( )便将其找到了;

所以删除它只需要令v.back()=0就行了。

海星

3. pop_heap 把指定区间的最后一个元素插入到堆中

sort_heap(v.begin(), v.end());
printContainer(v, "after sort_heap: ");

堆排序;

没了

c++11里面的玄学东西高考完再说

现在不敢用

毕竟我是一个联赛选手

引用资料:

  • 【C++ STL应用与实现】72: 标准库里的堆--如何使用标准库的heap算法 https://blog.csdn.net/elloop/article/details/53402209

  • 百度百科 堆  https://baike.baidu.com/item/%E5%A0%86/20606834?fr=aladdin

当堆遇到STL 代码焕发光芒的更多相关文章

  1. 树、图、堆、STL(来自菜鸡的"炒鸡"干粮)

    树.图.堆.STL 图论基础 简单图: 没有自环,两个顶点之间最多只有一条边. 完全图: 一个简单图,每两个顶点之间都有一条边.一共有(n-1)*n/2条边. 二分图: 一个简单图,设G=(V,E)是 ...

  2. 最小堆的两种实现及其STL代码

    #include<cstdio> #include<iostream> #include<algorithm> #include<vector> boo ...

  3. 堆以及stl堆的使用

    概念 性质: 1.堆是一颗完全二叉树,用数组实现.    2.堆中存储数据的数据是局部有序的. 最大堆:1.任意一个结点存储的值都大于或等于其任意一个子结点中存储的值.      2.根结点存储着该树 ...

  4. STL 堆的使用

    本来是要写leetcode上的merge k sorted lists那道题目,这个题目我还是很熟悉的,毕竟是看过算法导论的人,但是写的过程中对堆的维护代码还是挺多的,所以我想到了STL中的堆.下面就 ...

  5. 基于STL的堆略解

    什么是STL 以下内容摘自这儿. STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Le ...

  6. STL学习之路

    本文面向的读者:学习过C++程序设计语言(也就是说学习过Template),但是还没有接触过STL的STL的初学者.这实际上是我学习STL的一篇笔记,老鸟就不用看了. 什么是泛型程序设计 我们可以简单 ...

  7. 基本数据结构——堆(Heap)的基本概念及其操作

    基本数据结构――堆的基本概念及其操作 小广告:福建安溪一中在线评测系统 Online Judge 在我刚听到堆这个名词的时候,我认为它是一堆东西的集合... 但其实吧它是利用完全二叉树的结构来维护一组 ...

  8. 堆应用---构造Huffman树(C++实现)

    堆: 堆是STL中priority_queue的最高效的实现方式(关于priority_queue的用法:http://www.cnblogs.com/flyoung2008/articles/213 ...

  9. C++STL模板库序列容器之vector

    目录 STL之Vecter 一丶STL简介 二丶Vector用法 1.vector容器的使用 2.vector迭代器. 3.vector中的方法. 三丶常用算法 1.常见算法中的算法方法. 2.sor ...

随机推荐

  1. c# List使用中遇到的问题

    最近在项目上写的方法,想通过减少访问数据层,将需要重复调用的值存入List,无意中碰到的一个巨坑,至今仍不明所以,在此写出来,一来是看看有没有同道中人,二来是看看有没有大牛能解惑. 逻辑如下: 1.从 ...

  2. AJPFX外汇的常见形态

    AJPFX:外汇价常见形态 外汇的价格,本质上是由供求关系决定的,但是在技术分析的世界里,是什么原因导致供求关系的改变并不重要,也没有人能准确的找出所有的因素并加以判断,但是供求关系被改变后的外汇走势 ...

  3. 201621123018《Java程序设计》第7周学习报告

    1. 本周学习总结 1.1 思维导图:Java图形界面总结 2.书面作业 1. GUI中的事件处理 1.1 写出事件处理模型中最重要的几个关键词. 事件.事件源. 事件监听器.事件处理方法 1.2 任 ...

  4. SpringBoot2 配置

    一.Properties与Yaml SpringBoot支持properties与yaml两种配置文件application.properties/application.yml yaml简单使用 1 ...

  5. spring boot 中使用LUA脚本

    编写LUA脚本 该脚本功能:先检查redis中某个key的值是否与期望的值V1一致,如果一致则将其修改为新的值V2并返回true,否则返回false.其实就是CAS. local current = ...

  6. MySQL order by的实现

      1.使用索引的已有顺序 2.filesort算法 filesort算法的执行流程     filesort相关的参数 sort_buffer_size 算法排序缓冲区的大小,线程级缓存 max_l ...

  7. SQL 一对多联表查询最大值

    有两个数据表City表和Price表,CIty表的结构如下: Price表的结构如下: 查询每个城市最大的销售价格,并以最大价格进行降序排列,选取前5条记录,SQL语句的代码如下: * from (s ...

  8. 课程一(Neural Networks and Deep Learning),第一周(Introduction to Deep Learning)—— 0、学习目标

    1. Understand the major trends driving the rise of deep learning.2. Be able to explain how deep lear ...

  9. git commit --amend的撤销方法

    某同事执行git commit 时太兴奋,执行了 git commit --amend 慌了,不敢编辑上一个commit的description了,直接选择了wq退出,然而git毕竟强大,默认将改动合 ...

  10. SpringMVC+FreeMarker+Mybatis 整合

    这个项目自己有时写写测试代码什么的, 代码比较简单,代码已放在 github : https://github.com/zhouyongtao/homeinns-web 目录结构: 贴一下Maven的 ...