zoukankan      html  css  js  c++  java
  • 【算法学习】老算法,新姿势,STL——Heap

    “堆”是一个大家很熟悉的数据结构,它可以在(O(log;n))的时间内维护集合的极值。

    这都是老套路了,具体的内部实现我也就不谈了。

    我一般来说,都是用queue库中的priority_queue,也就是STL的优先队列来实现堆的,然而最近我发现了一个新的STL容器,它相对优先队列有着更小的常数和更方便的操作。

    它就是heap,就是堆。

    关于heap,STL提供了4个函数,它们都定义于algorithm库中。它们分别是:

    建立堆:

    make_heap(_First, _Last, _Cmp)

    在堆中添加元素:

    push_heap(_First, _Last, _Cmp)

    要先添加元素,再调用函数。

    在堆中删除元素:

    pop_heap(_First, _Last, _Cmp)

    要先调用函数,再删除(不删也可以,只要保证不会出现内存泄漏或者其它bug)。

    堆排序:

    sort_heap(_First, _Last, _Cmp)

    排完序,就像普通的sort一样了,变成有序数组了。不再具有堆的性质。

    sort一样,其中_First_Last都是头,尾指针或迭代器(对应vector或queue),而_Cmp表示了元素间的大小关系函数。

    类似sort,堆中的元素是[_First, _Last)的区间,若内存不连续,也至少要是可随机访问的迭代器(如vector)。

    其中_Cmp不是必要的,但是如果有定义_Cmp,一般情况下所有函数都需要加上_Cmp。

    还需注意这些函数维护的均是大根堆(即父亲值比孩子大的堆,也称最大堆)。

  • 相关阅读:
    我要AFO啦好伤感啊
    noip2012~2015刷题小记录
    【20161114模拟赛】
    第5模块闯关CSS练习题
    HTML练习题
    Mysql常用命令行大全
    mysql破解密码安装与基本管理
    python 闯关之路四(下)(并发编程与数据库编程) 并发编程重点
    Python/ selectors模块及队列
    python3 中 Event.wait 多线程等待
  • 原文地址:https://www.cnblogs.com/PinkRabbit/p/7051057.html
Copyright © 2011-2022 走看看