priority_queue是一个安排好的顺序存储的队列,队首是优先级最高的元素。

Template<class T , class Container = vector<T> , class compare = less<T>>

第一个参数是priority_queue保存的元素类型T,Container是配置的底层容器,priority_queue默认使用了底层容器vector,但也可以使用deque,但是绝对不能使用list,因为list是不能随机访问元素的。Less是一个类模板,支持两个类型为T的元素进行operator<运算,来进行比较。(比较后得到优先级)

优先级越大离队首越近;,通过top()方法可以返回队首元素的const&,

#include <iostream>
#include <queue>
class Error
{
public:
Error(int priority,std::string errorString)
:mPriority(priority),mErrorString(errorString)
{} int getPriority(){return mPriority;}
std::string getErrorString(){return mErrorString;}
friend bool operator <(const Error& lhs , const Error &rhs);
friend std::ostream &operator << (std::ostream &os, Error& rhs);
private:
std::string mErrorString;
int mPriority;
};
bool operator <(const Error& lhs , const Error &rhs)
{
return lhs.mPriority < rhs.mPriority;
} std::ostream &operator << (std::ostream &os,Error& rhs)
{
os << rhs.getErrorString() << "priority : " << rhs.getPriority() << std::endl;
return os;
} class ErrorCorrelateor
{
public:
void addError(const Error & error);
Error getError(); private:
std::priority_queue<Error> mError;
}; void ErrorCorrelateor::addError(const Error & error)
{
mError.push(error);
} Error ErrorCorrelateor::getError()
{
if(mError.empty())
{
throw std::out_of_range("priority queue is empty\r\n");
} else
{
Error tempError = mError.top();
mError.pop();
return tempError;
}
} int main() {
ErrorCorrelateor correlateor;
correlateor.addError(Error(,"Unable to read file"));
correlateor.addError(Error(,"Incorrect entry User"));
correlateor.addError(Error(,"Unable collacate memery"));
correlateor.addError(Error(,"Unable write file")); while(true)
{
try
{
Error ec = correlateor.getError();
std::cout << ec ;
}catch (const std::out_of_range&)
{
std::cout << "Finised Error correlatetor" << std::endl;
break;
}
}
return ;
}

结果是:

Unable collacate memerypriority : 9
Incorrect entry Userpriority : 5
Unable write filepriority : 5
Unable to read filepriority : 1
Finised Error correlatetor

priority_queue详解的更多相关文章

  1. 【STL】优先队列priority_queue详解+OpenJudge-4980拯救行动

    一.关于优先队列 队列(queue)这种东西广大OIer应该都不陌生,或者说,队列都不会你还学个卵啊(╯‵□′)╯︵┻━┻咳咳,通俗讲,队列是一种只允许从前端(队头)删除元素.从后端(队尾)插入元素的 ...

  2. multimap 和priority_queue详解

    上一期是关于STL和并查集结合的例题,也附了STL中部分容器的使用摘要,由于是从网上东拼西凑的,感觉有的关键点还是没解释清楚,现在从其中摘出两个容器,用例题对它们的用法进行进一步解释. 以下是例题的介 ...

  3. C++ STL 优先队列 priority_queue 详解(转)

    转自https://blog.csdn.net/c20182030/article/details/70757660,感谢大佬. 优先队列 引入 优先队列是一种特殊的队列,在学习堆排序的时候就有所了解 ...

  4. 优先队列priority_queue详解

    转载链接

  5. 详解C++ STL priority_queue 容器

    详解C++ STL priority_queue 容器 本篇随笔简单介绍一下\(C++STL\)中\(priority_queue\)容器的使用方法和常见的使用技巧. priority_queue容器 ...

  6. STL priority_queue 常见用法详解

    <算法笔记>学习笔记 priority_queue 常见用法详解 //priority_queue又称优先队列,其底层时用堆来实现的. //在优先队列中,队首元素一定是当前队列中优先级最高 ...

  7. STL之heap与优先级队列Priority Queue详解

    一.heap heap并不属于STL容器组件,它分为 max heap 和min heap,在缺省情况下,max-heap是优先队列(priority queue)的底层实现机制.而这个实现机制中的m ...

  8. C++ STL详解

    C++ STL详解 转载自:http://www.cnblogs.com/shiyangxt/archive/2008/09/11/1289493.html 一.STL简介 STL(Standard ...

  9. 如约而至,Java 10 正式发布! Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势 努力的孩子运气不会太差,跌宕的人生定当更加精彩 优先队列详解(转载)

    如约而至,Java 10 正式发布!   3 月 20 日,Oracle 宣布 Java 10 正式发布. 官方已提供下载:http://www.oracle.com/technetwork/java ...

随机推荐

  1. [javaSE] 网络编程(TCP-并发上传图片)

    客户端: 1.服务端点 2.读取客户端已有的图片数据 3.通过socket输出流将数据发给服务端 4.读取服务端反馈信息 5.关闭 获取Socket对象,new出来,构造参数:String的服务端ip ...

  2. Java基础教程(7)--运算符

      现在,我们已经学会了如何声明和初始化变量,但你可能想知道如何操作它们.运算符是对一个,两个或三个操作数执行特定操作并返回结果的特殊符号.下表列出了Java中的运算符:   表格中的运算符是按照从上 ...

  3. Kinect1驱动 PCL OpenCV ROS 安装

    1. OpenCV安装 1)在终端安装依赖项sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff4-dev li ...

  4. HTTP 错误500.19 - 错误代码 0x80070021

    1.错误描述 HTTP 错误500.19 -Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息 模块 IIS Web Core  通知 Begi ...

  5. 1739 GPA排序 个人博客:doubleq.win

    个人博客:doubleq.win 1739 GPA排序  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 青铜 Bronze 题解       题目描述 Description ...

  6. WinForm实现Rabbitmq官网6个案例-Topics

    代码: namespace RabbitMQDemo { public partial class Topics : Form { private string exchangeName = &quo ...

  7. SQLSERVER的逆向工程,将数据库导入到PowerDesigner中

    原文:http://blog.csdn.net/linianzhenti/article/details/42938595 PD是一款不错的数据库设计工具,在佩特来这个项目中,起初,合作伙伴用PD大体 ...

  8. Android解析WindowManagerService(二)WMS的重要成员和Window的添加过程

    前言 在本系列的上一篇文章中,我们学习了WMS的诞生,WMS被创建后,它的重要的成员有哪些?Window添加过程的WMS部分做了什么呢?这篇文章会给你解答. 1.WMS的重要成员 所谓WMS的重要成员 ...

  9. 辅助判卷程序的一些小bug

    首先谈一下,double类型 之前查过一些资料,double类型做==(相等)判断时候,会出现一些错误,及61.95与61.95不相等 对main函数中的部分加以改正,下面的answer为string ...

  10. Jsp程序要在Tomcat下运行

    首先,回顾下jsp与servlet的区别与联系 JSP经过编译后就成了servlet JSP本质就是Servlet,JVM只能识别java类,不能识别JSP代码,Web容器将JSP代码编译成JVM能够 ...