优先队列是单向队列的一种,可以按照默认或自定义的一种方式来对队列中的数据进行动态排序

template<class _Ty, class _Container = vector<_Ty>, class _Pr = less<typename _Container::value_type> > //默认以vector为容器的
class priority_queue
{   // priority queue implemented with a _Container
public:  typedef _Container container_type;  typedef typename _Container::value_type value_type;  typedef typename _Container::size_type size_type;  typedef typename _Container::reference reference;  typedef typename _Container::const_reference const_reference;  priority_queue() : c(), comp()  {   // construct with empty container, default comparator  }  explicit priority_queue(const _Pr& _Pred) : c(), comp(_Pred)  {   // construct with empty container, specified comparator  }  priority_queue(const _Pr& _Pred, const _Container& _Cont) : c(_Cont), comp(_Pred)  {   // construct by copying specified container, comparator  make_heap(c.begin(), c.end(), comp); //参见《STL系列之四 heap 堆的相关函数》  }  template<class _Iter>  priority_queue(_Iter _First, _Iter _Last) : c(_First, _Last), comp()  {   // construct by copying [_First, _Last), default comparator  make_heap(c.begin(), c.end(), comp);  }  template<class _Iter>  priority_queue(_Iter _First, _Iter _Last, const _Pr& _Pred) : c(_First, _Last), comp(_Pred)  {   // construct by copying [_First, _Last), specified comparator  make_heap(c.begin(), c.end(), comp);  }  template<class _Iter>  priority_queue(_Iter _First, _Iter _Last, const _Pr& _Pred, const _Container& _Cont) : c(_Cont), comp(_Pred)  {   // construct by copying [_First, _Last), container, and comparator  c.insert(c.end(), _First, _Last);  make_heap(c.begin(), c.end(), comp);  }  bool empty() const  {   // test if queue is empty  return (c.empty());  }  size_type size() const  {   // return length of queue  return (c.size());  }  const_reference top() const  {   // return highest-priority element  return (c.front());  }  reference top()  {   // return mutable highest-priority element (retained)  return (c.front());  }  void push(const value_type& _Pred)  {   // insert value in priority order  c.push_back(_Pred);  push_heap(c.begin(), c.end(), comp);  }  void pop()  {   // erase highest-priority element  pop_heap(c.begin(), c.end(), comp);  c.pop_back();  }  protected:  _Container c;   // the underlying container  _Pr comp;   // the comparator functor
};

  

用法:

1、默认用<运算符进行排序

大的先输出

2、priority_queue<type, vector<type>, fun<type>>pq;

vector<type>为容器类型

fun<type>为比较函数

3、自定义优先级

重载<

struct node
{friend bool operator< (node n1, node n2){return n1.priority < n2.priority;}int priority;int value;
};

  

转载于:https://www.cnblogs.com/KennyRom/p/5968191.html

priority_queue 优先队列相关推荐

  1. c++ std::priority_queue优先队列

    template <class T, class Container = vector<T>,class Compare = less<typename Container:: ...

  2. [C++STL教程]7.priority_queue优先队列入门学习!零基础都能听懂的教程

    不知不觉C++STL教程系列已经第7期了.之前我们介绍过:vector, queue, stack, set, map等等数据结构. 今天我们来学习一个新的stl容器:priority_queue优先 ...

  3. priority_queue优先队列的使用方法

    说到优先队列,大家肯定想到了队列(这肯定是对于学过队列的同学来说,当然了,没学过也没事,对于本篇文章没什么问题滴),队列的特征是后进后出,按照排队先来后到的顺序的,本篇文章介绍的priority_qu ...

  4. c++ 优先队列_std::priority_queue(优先队列)

    priority_queue<Type, Container, Functional> //Type 数据类型, //Container 容器类型(必须是用数组实现的容器,比如vector ...

  5. priority_queue优先队列

    引入 优先队列是一种特殊的队列,在学习堆排序的时候就有所了解. 那么优先队列是什么呢?  说白了,就是一种功能强大的队列. 它的功能强大在哪里呢?  四个字:自动排序. 优先队列的头文件&&a ...

  6. priority_queue优先队列的用法总结

    最近在刷题时很多次遇到了优先队列的用法,在这里mark一下,做个总结. 介绍: 既然是队列,那么先要包含头文件#include , 他和queue不同的就在于:我们可以自定义其中数据的优先级, 让优先 ...

  7. STL关于queue(队列)与priority_queue(优先队列)的一些笔记

    queue queue就是队列, 在STL中主要实现了一个先进先出的容器 使用queue应该先添加头文件#include<queue> queue<typename>name; ...

  8. priority_queue(优先队列)的简单构造与用法

    priority_queue priority_queue 优先队列,其底层是用堆来实现的.在优先队列中,队首元素一定是当前队列中优先级最高的那一个. 在优先队列中,没有 front() 函数与 ba ...

  9. STL(七)——队列queue优先队列priority_queue

    一.queue 1.特点:先进先出(FIFO-first in first out) 只允许在表的前端(front,称为队头)进行删除操作,在表的后端(rear,称为队尾)进行插入操作 2.基本操作 ...

最新文章

  1. 用Matplotlib跟踪疫情实时监控2019-nCoV
  2. 每天坚持一个CSS——社会人
  3. WordCount代码详解
  4. python开发中遇到的难题_初学者在Python开发中常见的问题(上)
  5. 22 FI配置-财务会计-定义收益留存科目(Retained Earning Account)
  6. 扩展JS格式化(Format)功能及评论树
  7. 零基础带你学习MySQL—日期函数(十五)
  8. transform,translate,transition 的区别
  9. 关于架设流媒体服务器与DRM加密问题
  10. (转帖)無號數及有號數的乘加運算電路設計(Verilog)
  11. 使用永恒之蓝漏洞攻击电脑
  12. 数据挖掘概念与技术第三版 范明、孟晓峰译 第三章习题答案
  13. pp助手苹果版_PP助手将下架?越狱时代已经过去,到底是该喜该悲
  14. 第四届“泰迪杯”数据分析技能赛-赛题A:《通讯产品销售和盈利能力分析》报告
  15. Java成员变量初始化顺序
  16. 麦吉尔大学计算机专业介绍,麦吉尔大学计算机专业申请要求及需要提交的材料...
  17. 波司登 × 阿里云 × 奇点云:教科书式的数智化转型实践
  18. Ubuntu 下无线网卡RTL8723BE不稳定的解决办法
  19. win18系统如何打开c语言,控制面板在哪里打开(Windows打开控制面板的方法)
  20. BFGS(Broyden-Fletcher-Goldfarb-Shanno)

热门文章

  1. System.BadImageFormatException: 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)...
  2. Mplayer的秘密功能
  3. WCF 4 高级编程 - 读书笔记
  4. ASP+Access数据库的终极安全大法18则(原创)
  5. python类中包含一个特殊的变量、它可以访问类的成员_Python 类的特殊成员介绍...
  6. fstab自动挂载_Linux系统挂载硬盘详解
  7. python引入模块教程_python进阶教程之模块(module)介绍
  8. M - 简单字符串排序
  9. java this关键字的使用_Java this 关键字的使用方法详解
  10. linux 访问centos共享,CentOS访问Windows共享