priority_queue(优先队列)是一个拥有权值观念的queue,它允许加入新元素,删除旧元素,审视元素值等功能。由于这是一个queue,所以只允许在底端加入元素,并从顶端取出元素, 除此之外别无其它存取元素的途径。

  缺省情况下priority_queue系列利用一个max_heap(最大堆)完成,后者是一个以vector表现的完全二叉树。Max_heap可以满足priority_queue所需要的“依权值高低自动递减排序”的特性。

             

  priority_queue完全以底部容器为根据,再加上heap处理规则,所以其实现非常简单,这里给出其模板声明:

 

template <class T, class Sequence = vector<T>, class Compare = less<typename Sequence::value_type>>
class priority_queue {
   //…
protected:
    Sequence c;   // 底层容器
    Compare comp; // 元素大小比较标准
   //…
};

  priority_queue模板有3个参数,第一个为元素类型,第二个为指定底层容器,默认为vector,第三个为内部元素比较函数,默认为标准库内置关系运算类仿函数less, 顺便把less的模板找出来看看:

template<class T>
struct less : public binary_function<T, T, bool>
{
         bool operator() (const T& x, const T& y)  { return x < y;}
};

  类似内置关系运算仿函数一共6个,为别为:

等于            equal_to<T>
不等于          not_equal_to<T>
大于            greater<T>
大于或等于       greater_equal<T>
小于            less<T>
小于或等于       less_equal<T>

  之后会单独将仿函数详细介绍下,这里只做相关了解。

  下面给出测试代码:

#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    ] = {,,,,,,,,};
    priority_queue<);
    cout << "size = " << ipq.size() << endl;    // size = 9

    ; i < ipq.size(); i++) {
        cout << ipq.top() << ' ';               // 9 9 9 9 9 9 9 9 9
    }
    cout << endl;

    while (!ipq.empty()) {
        cout << ipq.top() << ' ';               // 9 8 5 4 3 3 2 1 0
        ipq.pop();
    }
    cout << endl;

    ;
}

STL之容器适配器priority_queue的更多相关文章

  1. STL之容器适配器queue的实现框架

    说明:本文仅供学习交流,转载请标明出处,欢迎转载! 上篇文章STL之容器适配器stack的实现框架已经介绍了STL是怎样借助基础容器实现一种经常使用的数据结构stack (栈),本文介绍下第二种STL ...

  2. 初步STL该容器适配器

    容器适配器 特点 容器一定的顺序来实现(让现有的以集装箱堆放/式工作) 分类 1) stack: 头文件 <stack> • 栈 -- 后进先出 2) queue: 头文件 <que ...

  3. 容器适配器————priority_queue

    #include <queue> priority_queue 容器适配器定义了一个元素有序排列的队列.默认队列头部的元素优先级最高.因为它是一个队列,所以只能访问第一个元素,这也意味着优 ...

  4. STL之容器适配器stack的实现框架

    说明:本文仅供学习交流,转载请标明出处,欢迎转载! 一提到适配器(adapter).我们就想到了早期用电话线上网所用的调制解调器,俗称"猫"."猫"的作用是实现 ...

  5. 容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例

    一.容器适配器 stack queue priority_queue stack.queue.priority_queue 都不支持任一种迭代器,它们都是容器适配器类型,stack是用vector/d ...

  6. c++ STL容器适配器

    一.标准库顺序容器适配器的种类     标准库提供了三种顺序容器适配器:queue(FIFO队列).priority_queue(优先级队列).stack(栈)   二.什么是容器适配器     &q ...

  7. STL标准库-容器适配器

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 上一节介绍了仿函数适配器,这节主要介绍容器适配器和迭代器适配器的概念,其实容器适配器和迭代器其适配器就是封装了一些其他class ...

  8. STL之容器(1)

    STL容器类的模板 容器部分主要由头文件<vector>,<list>,<deque>,<set>,<map>,<stack>和 ...

  9. STL之容器基本操作

    容器类 STL Container Header Applications vector <vector> 直接访问任意元素,快速插入.删除尾部元素 deque <deque> ...

随机推荐

  1. C++ exception

    从没用过C++STL中的exception(异常类),在使用rapidxml,操作XML文件时,发现在一个抛出异常的错误.关注了下,就模范着做. 我也专门写了个函数来分配内存,如果发现分配不成功,就抛 ...

  2. HTML中的属性、段落、标题、换行等

    HTML的属性html标签的属性总是以名称/值(name=“value”)的方式出现:属性总是在html元素的开始标签中规定: 1.html链接由<a>标签定义,url在href中指定:& ...

  3. Winform水印

    本文实例展示了WinForm实现为TextBox设置水印文字功能,非常实用的技巧,分享给大家供大家参考. 关键代码如下 using System; using System.Runtime.Inter ...

  4. 警告:隐式声明与内建函数'exit'不兼容解决方案

    警告:隐式声明与内建函数'exit'不兼容解决方案 #include <stdio.h> int main() { printf("hello world!/n"); ...

  5. C#调试心经(1)(转)

    我们在做程序开发时,难免会遇到错误异常.如何快速地找到出错的地方.分析错误的原因以及找到解决问题的方案,是许多初级程序员困扰的问题,这也正是经验的宝贵之处.下面我将简单介绍在Visual Studio ...

  6. _IntfClear报错问题

    delphi对象在释放时会清除对象相关接口.如果开发人员在这之前已经将接口对应的对象释放掉,那么当清除到该接口时经常会报访问内存错误,如下图

  7. 解决ie6下不支持fix属性,模拟固定定位

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  8. 使用spring连接及操作mongodb3.0

    前边有一篇记录过不使用spring,直接在java代码中连接和操作mongodb数据库,这里就紧随其后记录一下使用spring的情况下,在java中简单操作mongodb.   maven导包配置: ...

  9. Python的第一天

    一.Python的简介 Python诞生于作者是Guido van Rossum,Python来自Guido所挚爱的电视剧Monty Python's Flying Circus (BBC1960-1 ...

  10. WPF中TreeView的使用

    因为项目中需要用到TreeView控件,由于是第一次在WPF中用到,因此事先在网上搜了很多关于数据绑定的方法介绍,个人经过实际应用,觉得WPF中的HierarchicalDataTemplate定义模 ...