STL heap和first_queue(未完结)

STL heap和first_queue

标签(空格分隔): @zhshh STL heap first_queue



可以看看这个文章

大家都知道,priority_queue是用堆实现的,可以通过重载()运算符选择使用最大堆或最小堆。以前一直觉得stl里面的heap相关的函数都是多余的,因为一般的heap操作都可以用priority_queue来做。直到今天看了July博客中的那道求前k小的数(http://blog.csdn.net/v_JULY_v/article/details/6370650)才发现stl中heap操作独立存在的必要
来自原文
stl里关于heap的函数与priority_queue的区别----CSDN jackycmu

STL类似的结构有heapfirst_queue,区别是heap可以在元素放入完成后再建堆,从而在O(n)时间内完成,而first_queue必须不断插入,因此时间是O(n*lg n)

STL_heap函数(在库algorithm里面)

make_heap 建堆
push_heap 插入元素
pop_heap 删除元素

sort_heap 堆排序(和堆操作没任何联系,sort_heap之后数据是排序的,就不是堆了)

此外还有is_heap(似乎是C++11的,不建议在OI使用,不知道是否支持)等等,C++reference

原文地址:https://www.cnblogs.com/zhshh/p/STL_heap.html

时间: 2024-11-02 07:41:03

STL heap和first_queue(未完结)的相关文章

4543 普通平衡树[未完结]

4543 普通平衡树 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 题目描述 Description 这是一道模板题. 如果觉得这个题水的可以做一下4544压行,是千古神犇花爸爸出的神犇题. 您需要写一种数据结构(可参考题目标题,但是这句话其实并没有什么用233),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数,因输出最小的排名)4. 查询排名为x的数5. 求x

STL -- heap结构及算法

STL -- heap结构及算法 heap(隐式表述,implicit representation) 1. heap概述 : vector + heap算法 heap并不归属于STL容器组件,它是个幕后英雄,扮演priority queue的助手.顾名思义,priority queue允许用户以任何次序将任何元素推入容器内,但取出时一定是从优先权最高(也就是数值最高)的元素开始取.binary max heap 正是具有这样的特性,适合作为priority queue 的底层机制. 让我们做一

CentOS系统优化脚本,未完结

#!/bin/bash #判断一个当前用户是不是root用户,不是则提示需要使用sudo来提升权限 if [ $user != "root"] then echo "需要使用 sudo 才能使用的脚本"] exit 1 fi #设置Selinux为关闭状态 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config #下载一个CentOS的yum源 cd /usr/loc

SSSP dijstra+stl::heap 邻接表模版

//SSSP dijstra+stl::heap 邻接表模版 #include<bits/stdc++.h> using namespace std; #define why 105 #define whym 1455 #define inf 0x3f3f3f3f int n,m,d[why],h[why],cnt,s,t; bool v[why]; struct node { int next,to,v; }a[whym*2]; struct tap { int num,v; bool op

【算法学习】老算法,新姿势,STL——Heap

"堆"是一个大家很熟悉的数据结构,它可以在\(O(log\;n)\)的时间内维护集合的极值. 这都是老套路了,具体的内部实现我也就不谈了. 我一般来说,都是用queue库中的priority_queue,也就是STL的优先队列来实现堆的,然而最近我发现了一个新的STL容器,它相对优先队列有着更小的常数和更方便的操作. 它就是heap,就是堆. 关于heap,STL提供了4个函数,它们都定义于algorithm库中.它们分别是: 与sort一样,其中_First,_Last都是头,尾指针

STL heap usage

简介 heap有查找时间复杂度O(1),查找.插入.删除时间复杂度为O(logN)的特性,STL中heap相关的操作如下: make_heap() push_heap() pop_heap() sort_heap() reverse() 本次着重介绍make_heap() ,根据其创出的堆有大小堆之分. 其函数原型如下: default (1) template <class RandomAccessIterator> void make_heap (RandomAccessIterator

STL heap部分源代码分析

本文假设你已对堆排序的算法有主要的了解. 要分析stl中heap的源代码的独到之处.最好的办法就是拿普通的代码进行比較.话不多说,先看一段普通的堆排序的代码: //调整大顶堆.使得结构合理 void max_heap(int a[],int node,int size) { int lg=node; int l=node*2; int r=node*2+1; if(l<=size&&a[lg]<a[l]) { lg=l; } if(r<=size&&a[l

POJ 2442 Squence (STL heap)

题意: 给你n*m的矩阵,然后每行取一个元素,组成一个包含n个元素的序列,一共有n^m种序列, 让你求出序列和最小的前n个序列的序列和. 解题思路: 1.将第一序列读入seq1向量中,并按升序排序. 2.将数据读入seq2向量中,并按升序排序. 将seq2[0] +seq1[i] ( 0<=i<=n-1)读入seqn向量中 用make_heap对seqn建堆. 然后seq2[1] + seq1[i] (0<=i<=n-1),如果seq2[1] +seq1[i]比堆seqn的顶点大,

STL heap部分源码分析

本文假设你已对堆排序的算法有基本的了解. 要分析stl中heap的源码的独到之处,最好的办法就是拿普通的代码进行比较.话不多说,先看一段普通的堆排序的代码: //调整大顶堆,使得结构合理 void max_heap(int a[],int node,int size) { int lg=node; int l=node*2; int r=node*2+1; if(l<=size&&a[lg]<a[l]) { lg=l; } if(r<=size&&a[lg