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

先介绍一个非常好的学习C++的网站 http://www.cplusplus.com/ 这个网站对C++的理解还是很好的,个人觉得比msdn要好不知道哪里去了。

对堆的操纵主要有以下四个:

make_heap, pop_heap, push_heap, sort_heap

他们的函数原型就不说了,需要说明的就是这些函数的操作和算法导论上的算法是一样的,有一些需要注意的细节是make_heap,pop_heap,push_heap,sort_heap三个参数的形式,他们第三个参数都是判断大小的函数,而这个函数就是他们这三个函数维护堆的比较函数,例如:

void pop_heap (RandomAccessIterator first, RandomAccessIterator last,
Compare comp);
        vector<int> a = { , , , , , , , , , , };
make_heap(a.begin(), a.end(),greater<int>());
cout << a.front() << endl; pop_heap(a.begin(),a.end(),greater<int>());
for (int i = ; i < a.size(); i++)
{
cout << a[i] << endl;
}
a.pop_back();

这个pop_heap操作是先把堆顶的元素拿出来,然后通过comp去维护堆(这里应该是把队尾的元素放到第一个去维护),然后在把之前堆顶的那个放到队尾。

所以comp是维护的基本,所以一般四个函数除非有特殊需求,要求comp必须相同。

STL 堆的使用的更多相关文章

  1. C++ STL堆操作

    /* STL 最大堆.最小堆的应用 */ #include <iostream> #include <vector> #include <algorithm> // ...

  2. STL 堆

    洛谷P3378 [模板]堆 #include <iostream> #include <cstdio> #include <algorithm> #include ...

  3. 堆以及stl堆的使用

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

  4. bzoj1293: [SCOI2009]生日礼物(stl堆)

    1293: [SCOI2009]生日礼物 题目:传送门 题解: 据说这道题乱搞随便就水过了 本蒟蒻想到了一个用堆的水法(还专门学了学queue): 如果把每一种颜色的下一个位置都记录一下的话,一开始就 ...

  5. dijkstra STL 堆优化

    Code: #include<iostream> #include<algorithm> #include<vector> #include<queue> ...

  6. 【STL学习】堆相关算法详解与C++编程实现(Heap)

    转自:https://blog.csdn.net/xiajun07061225/article/details/8553808 堆简介   堆并不是STL的组件,但是经常充当着底层实现结构.比如优先级 ...

  7. STL 最大堆与最小堆

    在第一场CCCC选拔赛上,有一关于系统调度的水题.利用优先队列很容易AC. // 由于比赛时花费了不少时间研究如何定义priority_queue的比较函数,决心把STL熟练掌握... Queue 首 ...

  8. 堆的基础题目学习(EPI)

    堆的应用范围也比较广泛,经常游走在各种面试题目之前,不论算法设计的题目还是海量数据处理的题目,经常能看到这种数据结构的身影.堆其实就是一个完全二叉树的结构,经常利用数组来实现.包含最大堆和最小堆两种. ...

  9. STL之heap与优先级队列Priority Queue详解

    一.heap heap并不属于STL容器组件,它分为 max heap 和min heap,在缺省情况下,max-heap是优先队列(priority queue)的底层实现机制.而这个实现机制中的m ...

随机推荐

  1. redis的no-appendfsync-on-rewrite参数

    redis提供了两种持久化机制,rdb和aof. 关于aof的原理,类似于预写日志,不再解释.其中几个选项如下: appendfsync always:总是写入aof文件,并完成磁盘同步appendf ...

  2. 使用POI导出excel进阶篇

    进阶篇就是涉及到合并单元格了.就是某一列相同的单元格需要合并为一个,并分为多个sheet. 效果如图: 直接上代码,需要提供的数据自己搞,传到工具类里面就好. JcExcelVoSuper.java ...

  3. QT QString与char *之间的转换 【转载】

    原文网址:http://blog.csdn.net/candyliuxj/article/details/6429208 1.QString转char * 先将QString转换为QByteArray ...

  4. BZOJ1293:[SCOI2009]生日礼物

    浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?i ...

  5. Day3(1)linux文件系统及文件类型

    Linux的文件系统 根文件系统(rootfs) root filesystem LSB,FHS:(FileSystem Heirache Standard) /etc,/usr,/var,/root ...

  6. GUI练习中

    总结:JFrame和Frame是有很大差别的. 不要混淆.否则方法是不能成功调用的 特别是背景色:JFrame.对象f在main里无法调用背景色前景色都不想显示 一下是书上的一段代码,编译错误,但是可 ...

  7. 映射块设备提示rbd: sysfs write failed的解决方法

    标签(空格分隔): ceph ceph运维 rbd 问题描述: 创建完镜像foo后,映射镜像时提示下面的错误: [root@node3 ~]# rbd map testpool/foo rbd: sy ...

  8. mybatis---demo1--(n-n)----bai

    实体类1: package com.etc.entity; import java.util.List; public class RoleInfo { private int rid; privat ...

  9. SPARC T4 RAID Setup (ZT)

    http://www.confignotes.com/2013/09/sparc-t4-raid-setup/ How to configure a RAID volume with the inte ...

  10. [cerc2017J]Justified Jungle

    题目大意:删去k条边,树变为相等个点的连通分量,求所有正整数k. 解题关键:树dp,不必求因子. #include<bits/stdc++.h> using namespace std; ...