STL -最大最小堆 priority_queue

//添加头文件#include<queue>
using namespace std;

最大堆实现:

优先输出大数据
priority_queue<Type, Container, Functional>
Type为数据类型, Container为保存数据的容器,Functional为元素比较方式。
如果不写后两个参数,那么容器默认用的是vector,比较方式默认用operator<,也就是优先队列是大顶堆,队头元素最大。
#include<iostream>
#include<queue>
using namespace std;  

int main(){
    priority_queue<int> p;
    p.push(1);
    p.push(2);
    p.push(8);
    p.push(5);
    p.push(43);
    for(int i=0;i<5;i++){
        cout<<p.top()<<endl;
        p.pop();
    }
    return 0;
}  

最小堆实现:

    class CMyPair :public CVertex
    {
    public :
        CMyPair(CVertex *a, CVertex *b) {
            m_pair_a = a;
            m_pair_b = b;
            cost = 0;
        }
        ~CMyPair() {};
        double getCost() { return cost; }
        void setCost(double c) { cost = c; }
    protected:
        CVertex * m_pair_a;
        CVertex * m_pair_b;
        double cost;
    };
    struct cmp {
        bool operator()(CMyPair a, CMyPair b) {
            if (a.getCost()== b.getCost())  return a.getCost()>b.getCost();
            return a.getCost()>b.getCost();
        }
    };

priority_queue<CMyPair, vector<CMyPair>,cmp> heap;

常用函数:

heap.empty();
heap.push();
heap.pop();
heap.top();
时间: 2024-10-29 21:15:00

STL -最大最小堆 priority_queue的相关文章

C++ priority_queue 最大堆、最小堆

问题描述 通常在刷题的时候,会遇到最大堆.最小堆的问题,这个时候如果自己去实现一个也是OK的,但是通常时间不太够,那么如何处理?这时,就可以借助C++ STL的priority_queue. 具体分析 需要注意的是,C++ STL默认的priority_queue是将优先级最大的放在队列最前面,也即是最大堆.那么如何实现最小堆呢? 假设有如下一个struct: struct Node { int value; int idx; Node (int v, int i): value(v), idx

c++用priority_queue实现最小堆,并求解最大的n个数

1 //c++用priority_queue实现最小堆,并求解很多数中的最大的n个数 2 #include <iostream> 3 #include <queue> 4 #include <time.h> 5 #include <vector> 6 using namespace std; 7 struct Node { 8 double value; 9 int idx; 10 Node (double v, int i): value(v), idx(

STL最小堆

前几天同学参加腾讯实习的网络笔试,闲聊中得知一道编程题目,最近也在看算法,觉得刚好用来练手. 这题觉得以最小堆实现比较方便,在C++中,以<algorithm>中 make_heap(), push_heap(), pop_heap(), sort_heap()四个函数管理堆十分方便. make_heap(RandomIt first, RandomIt last, Compare comp)对 [first, last - 1]中的元素建立最大堆,修改comp可以处理最小堆: push_he

hdu 4006 The kth great number (优先队列+STB+最小堆)

The kth great number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Submission(s): 6637    Accepted Submission(s): 2671 Problem Description Xiao Ming and Xiao Bao are playing a simple Numbers game. In a roun

优先队列及最小堆最大堆

为什么优先队列里默认是堆(heap)实现,默认是优先级高的出队,定义结构体重载函数为什么要按照从小到大排序?原来是自己对优先队列还不太了解: 1 堆 1.1 简介 n个关键字序列Kl,K2,-,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质): (1)ki<=k(2i)且ki<=k(2i+1)(1≤i≤ n),当然,这是小根堆,大根堆则换成>=号.//k(i)相当于二叉树的非叶结点,K(2i)则是左孩子,k(2i+1)是右孩子 若将此序列所存储的向量R[1..n]看做是一

STL之容器适配器priority_queue的实现框架

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 在前面的文章STL之heap相关操作算法中介绍了堆的相关操作算法,由于堆的注意主要作用是用于排序,我们也知道堆排序的时间复杂度为o(nlogn),是一种不稳定的排序算法,利用堆这一数据结构,我们可以很快第获取一个大数据中最大(或最小)的k个数.同时,上篇文章中,也提出了相关heap算法的一些问题. 问题1:在调用push_heap函数实现向堆中插入元素之前,我们必须要先将向底层容器的末端插入该元素,然后才能调用push_heap内部的向上调整来

POJ 3784 Running Median (最大最小堆)

最大最小堆动态求中位数 题意:输入M个数,当已输入的个数为奇数个时输出此时的中位数. 一共有M/2+1个中位数要输出,每一行10个. 分析: 用两个优先队列来模拟最大最小堆.中位数是x,就是有一半数比x小,一半数比x大. 刚好符合堆的特点. 用一个从大到小排序的优先队列q1来模拟小于x的数. 从小到大排序的优先队列q2来模拟大于x的数. 动态维护两个优先队列的元素个数.q1.size()=q2.size() 输入的数为偶数个时, q1.size()=q2.size()+1 输入的数为奇数个时.

通用的最小堆(最大堆)D-ary Heap

听说有一种最小(大)堆,不限于是完全二叉树,而是完全D叉树,名为D-ary Heap(http://en.wikipedia.org/wiki/D-ary_heap).D可以是1,2,3,4,100,对于优先队列该有的功能都没有问题. 动手写一个D-ary Heap,应该不难.简单起见,不考虑像STL一样通过template传入Comp类,下面的实现要求T类型重载了operator <和operator >. template<class T> class DaryHeap { s

初学算法-基于最小堆的优先级队列C++实现

笔者近日实现了最小堆类及其派生的优先级队列,特将代码奉上,不足之处还请指出! 在实现优先级队列时,笔者表示萌萌哒没有用过template写派生类,结果写完了出现error: *** was not decleared in this scope..后来各种补上this->才完事,在CSDN(笔者的帖子地址? http://bbs.csdn.net/topics/391806995)上提问后才知道是模板参数依赖,笔者表示涨姿势了.. /**  * The Minimum Heap Class an