堆的操作(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 解题思路: 求取中 ...
随机推荐
- python造数
做性能测试时,往往需要大量的参数化数据,比如注册. from random import Random def random_str(randomlength=8): str='' chars='01 ...
- 2019.3.5 L261 Are All Our Organs Vital?
Medicine has not always shown a lot of respect for the human body. Just think about the ghoulish dis ...
- dos命令:网络相关命令
网络相关命令 一.Arp命令 1.介绍 显示和修改地址解析协议(ARP)使用的“IP 到物理”地址转换表. 2.语法 ARP -s inet_addr eth_addr [if_addr] ARP ...
- python cookies提取——从字符串到字典(一行Python代码)
def extract_cookies(cookie): """从浏览器或者request headers中拿到cookie字符串,提取为字典格式的cookies&quo ...
- Day15作业及默写
1.整理今天内容 PASS 2.现有列表alist = [3,1,-4,2,-6] 按照元素的绝对值大小进行排序 alist = [3,1,-4,2,-6] sorted(alist,key=lamb ...
- wx小程序功能总结
注:1. 微信默认的宽度为750rpx , 不会变化. 2.bindtap 绑定触摸事件,可冒泡 catchtap 绑定触摸事件,不可冒泡 1.唤出系统菜单 2.上传图片 showSelection( ...
- POJ2785-4 Values whose Sum is 0
传送门:http://poj.org/problem?id=2785 Description The SUM problem can be formulated as follows: given f ...
- Go unitest
待测试: // add.go package util func Add(a int, b int) int { return a + b} 使用gotests工具,自动生成测试用例框架: https ...
- 使用Git去管理修改
Git跟踪的是修改而不是文件本身. 看下面一个例子 首先我们修改我们Git管理的git.txt文件 如下: 然后添加: 然后我们再去修改git.txt这个文件 然后直接提交到分支里如图: 也就是说我们 ...
- 网络流Dinic算法
我的模板 例题: https://vjudge.net/problem/HDU-4280 struct Edge { int lst; int from; int to; int cap; int f ...