堆的操作(make_heap,push_heap,pop_heap,sort_heap,is_heap)
堆不是一中sort ranges,堆中的元素不会以递增方式排列,内部以树状形式排列,该结构以每个结点小于等于父节点构成,优先队列就是以堆来实现
make_heap
//版本一:用operator <比较元素 template <class RandomAccessIterator> void make_heap(RandomAccessIterator first,RandomAccessIterator last); //版本二:用自定义的function object比较元素 template <class RandomAccessIterator,class StrictWeakOrdering> void make_heap(RandomAccessIterator first,RandomAccessIterator last,StrictWeakOrdering cmp);
push_heap
//版本一:用operator <比较元素 template <class RandomAccessIterator> void push_heap(RandomAccessIterator first,RandomAccessIterator last); //版本二:用自定义的function object比较元素 template <class RandomAccessIterator,class StrictWeakOrdering> void push_heap(RandomAccessIterator first,RandomAccessIterator last,StrictWeakOrdering cmp);
堆以[first,last-1)表示,新增加的元素为*(last-1);[first,last-1)为有效地range,也就是其不为空并且是一个堆
pop_heap
//版本一:用operator <比较元素 template <class RandomAccessIterator> void pop_heap(RandomAccessIterator first,RandomAccessIterator last); //版本二:用自定义的function object比较元素 template <class RandomAccessIterator,class StrictWeakOrdering> void pop_heap(RandomAccessIterator first,RandomAccessIterator last,StrictWeakOrdering cmp);
从堆中移除最大元素(即*first);[first,last-1)为有效地range,也就是其不为空;这两个版本的操作都有一个必然的结果:从堆中移除的元素是*(last-1),并且移除后为一个新堆
sort_heap
//版本一:用operator <比较元素 template <class RandomAccessIterator> void sort_heap(RandomAccessIterator first,RandomAccessIterator last); //版本二:用自定义的function object比较元素 template <class RandomAccessIterator,class StrictWeakOrdering> void sort_heap(RandomAccessIterator first,RandomAccessIterator last,StrictWeakOrdering cmp);
把堆转化为一个sorted ranges,不一定会保持等价元素的相对顺序
is_heap
//版本一:用operator <比较元素 template <class RandomAccessIterator> void is_heap(RandomAccessIterator first,RandomAccessIterator last); //版本二:用自定义的function object比较元素 template <class RandomAccessIterator,class StrictWeakOrdering> void is_heap(RandomAccessIterator first,RandomAccessIterator last,StrictWeakOrdering cmp);
测试一个序列是否是一个堆
#include <iostream> #include <vector> #include <iterator> #include <algorithm> using namespace std; int main() { vector<,,,,,,}; make_heap(v.begin(),v.end()-); for_each(v.begin(),v.end(),[](int i) { cout<<i<<" "; }); cout<<endl; push_heap(v.begin(),v.end()); for_each(v.begin(),v.end(),[](int i) { cout<<i<<" "; }); cout<<endl; cout<<is_heap(v.begin(),v.end())<<endl; sort_heap(v.begin(),v.end()); cout<<is_heap(v.begin(),v.end())<<endl; ; }
堆的操作(make_heap,push_heap,pop_heap,sort_heap,is_heap)的更多相关文章
- STL make_heap push_heap pop_heap sort_heap
make_heap: default (1) template <class RandomAccessIterator> void make_heap (RandomAccessItera ...
- POJ - 1456 贪心 堆常用操作 注意细节
题意:给定n个商品的deadline和profit,求每天卖一件的情况下的最大获利 显然是一道贪心 按deadline从小到大排序好,动态维护小根(profit)堆的大小<=当前deadline ...
- C#=> 栈模仿堆的操作
//原理,利用两个栈,互相作用,来模仿堆的效果,先进先出.. using System; using System.Collections.Generic; using System.Linq; us ...
- 论C++STL源代码中关于堆算法的那些事
关于堆,我们肯定熟知的就是它排序的时间复杂度在几个排序算法里面算是比較靠上的O(nlogn)常常会拿来和高速排序和归并排序讨论,并且它还有个长处是它的空间复杂度为O(1), 可是STL中没有给我们提供 ...
- 不要重复发明轮子-C++STL
闫常友 著. 中国铁道出版社. 2013/5 标准的C++模板库,是算法和其他一些标准组件的集合. . 1.类模板简介 2.c++中的字符串 3.容器 4.c++中的算法 5.迭代器 6.STL 数值 ...
- STL--STL和她的小伙伴们:
STL--概述: 标准模板库(StandardTemplateLibrary,STL),是C++程序设计语言标准模板库.STL是由Alexander Stepanov.Meng Lee和David R ...
- (转)c++一些知识点
异常详解: https://www.cnblogs.com/hdk1993/p/4357541.html#top 模版详解: https://blog.csdn.net/lezardfu/articl ...
- cb50a_c++_STL_算法_局部排序partial_sort
cb50a_c++_STL_算法_局部排序partial_sort partial_sort(b,se,e)排序一部分,begin,source end,endcout << " ...
- POJ 3784.Running Median
2015-07-16 问题简述: 动态求取中位数的问题,输入一串数字,每输入第奇数个数时求取这些数的中位数. 原题链接:http://poj.org/problem?id=3784 解题思路: 求取中 ...
随机推荐
- 1.4socket服务器打印信息的四种不同方式()
方式一 socker 服务器 # -*- coding: utf-8 -*- import sys,os,multiprocessing from socket import * serverHost ...
- Java作业四
1.先在一个包中编写第一个类ClassA,要求该类中具有四种不同访问权限的成员,再在另一个包中编写第二个类ClassB,并在该类中编写一个方法以访问第一个类中的成员.总结类成员访问控制的基本规则. p ...
- 多War包合并,jetty测试
模块间的相互依赖引用配置在pom.xml中加入要依赖的模块即可<dependency> <groupId>com.exayong</groupId> & ...
- Linux文件系统命令 cat
命令名:cat 功能:在当前窗口中查看制定位置的文件的内容. eg: renjg@renjg-HP-Compaq-Pro--MT:~/test$ cat /etc/apache2/ports.conf ...
- 惊不惊喜, 用深度学习 把设计图 自动生成HTML代码 !
如何用前端页面原型生成对应的代码一直是我们关注的问题,本文作者根据 pix2code 等论文构建了一个强大的前端代码生成模型,并详细解释了如何利用 LSTM 与 CNN 将设计原型编写为 HTML 和 ...
- python 爬虫数据准换时间格式
timeStamp = 1381419600 dateArray = datetime.datetime.utcfromtimestamp(timeStamp) otherStyleTime = da ...
- python短域名数据分析框架
本文数据源及分析方法均参考<利用python进行数据分析>一书.但我重新对数据分析目标和步骤进行了组织,可以更加清晰的呈现整个挖掘分析流程. 分析对象为美国某短域名网站记录的短域名生成数据 ...
- [工作日志] 2018-12-06 重点: 解决安全测试bug
安全测试bug 业务端提出, 在修改是否给联系人发送短信接口,如果操作人和被操作的联系人不在同一个企业的情况下, 也是可以修改的. 解决办法: 加校验.
- Centos7安装vsftpd
1.安装vsftpd yum install vsftpd 2.添加一个ftp用户,一个不能登录系统用户,只用来登录ftp服务,这里如果没设置用户目录.默认是在home下. useradd ftpac ...
- Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机
文章目录 1. 开箱即用,内藏玄机 2. 总结 3. 源代码 Spring Boot提供了很多”开箱即用“的依赖模块,那么,Spring Boot 如何巧妙的做到开箱即用,自动配置的呢? 开箱即用,内 ...