#include<vector>
#include<algorithm>
#include<iostream>

using namespace std;

void PrinfVectorInt(vector<int> &vec)
{
for(auto iter = vec.begin(); iter != vec.end(); ++iter)
{
cout << *iter << ", ";
}
cout << endl;
}

bool Greater(int & data_left, int & data_right)
{
return data_left >= data_right;
}

int main ()
{
vector<int> vecMinHeap = {11, 54, 32, 45, 65, 76, 89, 4, 45, 13,25, 2, };

//建堆
make_heap(vecMinHeap.begin(), vecMinHeap.end(), Greater);
PrinfVectorInt(vecMinHeap);
if(30 > vecMinHeap.front())
{
pop_heap(vecMinHeap.begin(), vecMinHeap.end(), Greater);
vecMinHeap.back() = 30;
push_heap(vecMinHeap.begin(), vecMinHeap.end(), Greater);
}

PrinfVectorInt(vecMinHeap);
if(4 > vecMinHeap.front())
{
pop_heap(vecMinHeap.begin(), vecMinHeap.end(), Greater);
vecMinHeap.back() = 4;
push_heap(vecMinHeap.begin(), vecMinHeap.end(), Greater);
}

PrinfVectorInt(vecMinHeap);

if(132 > vecMinHeap.front())
{

pop_heap(vecMinHeap.begin(), vecMinHeap.end(), Greater);
vecMinHeap.back() = 132;
push_heap(vecMinHeap.begin(), vecMinHeap.end(), Greater);
}
PrinfVectorInt(vecMinHeap);
return 1;
}

//使用了c++11 的特性,所以需要使用c++11的库编译

g++ --std=c++11 -o min_head min_heap.cpp

c++ std 最小堆的使用 (用于实现top100之类的功能)的更多相关文章

  1. ZOJ 2724 Windows Message Queue (优先级队列,水题,自己动手写了个最小堆)

    #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm& ...

  2. 2018中国大学生程序设计竞赛 - 网络选拔赛 1001 - Buy and Resell 【优先队列维护最小堆+贪心】

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6438 Buy and Resell Time Limit: 2000/1000 MS (Java/O ...

  3. 《徐徐道来话Java》:PriorityQueue和最小堆

    在讲解PriorityQueue之前,需要先熟悉一个有序数据结构:最小堆. 最小堆是一种经过排序的完全二叉树,其中任一非终端节点数值均不大于其左孩子和右孩子节点的值. 可以得出结论,如果一棵二叉树满足 ...

  4. c++/java/python priority_que实现最大堆和最小堆

    #include<iostream>#include<vector>#include<math.h>#include<string>#include&l ...

  5. 最大堆 最小堆 解决TOPK问题

    堆:实质是一颗完全二叉树,最大堆的特点:父节点值均大于子节点:最小堆的父节点值均小于子节点: 一般使用连续内存存储堆内的值,因而可以根据当前节点的索引值推断子节点的索引值: 节点i的父节点为(i-1) ...

  6. 使用最小堆来完成k路归并 6.5-8

    感谢:http://blog.csdn.net/mishifangxiangdefeng/article/details/7668486 声明:供自己学习之便而收集整理 题目:请给出一个时间为O(nl ...

  7. 最小堆实现优先队列:Python实现

    最小堆实现优先队列:Python实现 堆是一种数据结构,因为Heapsort而被提出.除了堆排序,“堆”这种数据结构还可以用于优先队列的实现. 堆首先是一个完全二叉树:它除了最底层之外,树的每一层的都 ...

  8. Jcompress: 一款基于huffman编码和最小堆的压缩、解压缩小程序

    前言 最近基于huffman编码和最小堆排序算法实现了一个压缩.解压缩的小程序.其源代码已经上传到github上面: Jcompress下载地址 .在本人的github上面有一个叫Utility的re ...

  9. C++实现最小堆及插入,调整顺序,删除堆顶元素的操作

    上次用Java实现了最大堆的封装,这次就来写一下最小堆的实现吧 插入函数的思路: 向堆中插入元素有两种情况,一种是堆为空,那么就让插入值作为根节点即可:另一种是堆不为空,那么此时就要进行判断当前节点与 ...

随机推荐

  1. webshell导致项目崩溃

    mysql挂死,无法启动,解决mysql无法启动: /etc/my.cnf配置文件中innodb_force_recovery=1然后service mysqld start/etc/my.cnf配置 ...

  2. OO第二单元作业分析

    前言 这一单元关于线程安全的作业结束了,在助教提供的接口的帮助以及老师提供的设计模型的指导下,这三次作业还是相对轻松地完成了,中间也没有出现什么bug,可能就是因为简单的逻辑不容易出错吧,可惜两次都由 ...

  3. 3. Port scanners (端口扫描器 4个)

    3. Port scanners (端口扫描器 4个) 愤怒的IP扫描器是一个小的开源Java应用程序,它执行主机发现(“ping扫描”)和端口扫描. 旧的2.x版本只有Windows,但是,新的3. ...

  4. javascript dom页面中的location属性

    属性名称 host:设置或返回主机名和当前URL的端口号 hostname:设置或 返回当前的URL的主机名 href:设置或返回完整的url,可用于设置跳转 hash:设置或返回从#号开始的URL锚 ...

  5. promise在angular中的基本使用

    promise在angular中的基本使用 <!DOCTYPE html> <html ng-app="myApp"> <head> <m ...

  6. java web(五):java web三大组件之另外两个和八大监听器

    java的三大组件指Servlet.Filter.Listener.八大监听器指八个接口.前面介绍了Servlet,现在介绍一下Filter拦截器以及拦截地址的设置, Listener监听那些事件. ...

  7. C#编码规范之代码的增删改约定

    增加 ,仅增加一行时可以是这样"int a = GetScale(obj, col); // 描述.add by Tome 2018-9-20",多行时见下. #region ad ...

  8. 实现自己的MVC AJAX框架计划

    最近看了一下设计自己框架的文章,所以也想自己去实现一个小框架,用于以后的项目中,只求方便, 需要参考各位前辈的代码,或者直接copy过来为我所用,哈哈,想想都开心. 不过,要写个好的框架肯定不容易,现 ...

  9. a标签通过浏览器下载远程图片

    <a href="http://fooku.oss-cn-hongkong.aliyuncs.com/image/store/2nblHVyB6cWyBI7Aq2SEp6aZRBlui ...

  10. 剑指offer 6.查找和排序 旋转数组的最小数字

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...