博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[C/C++标准库]_[0基础]_[优先队列priority_queue的使用]
阅读量:6200 次
发布时间:2019-06-21

本文共 1492 字,大约阅读时间需要 4 分钟。

std::priority_queue

场景:

1. 对于一个任务队列,任务的优先级由任务的priority属性指明,这时候就须要优先级越高的先运行。而queue并没有排序功能,这时priority_queue是比較好的选择.

2 对于异步的task也是一样。在不断加入新的task时,当然希望优先级越高的先运行.

解析:

1. 假设须要把优先级最高的先pop,那么comp比較时须要返回false.

代码:

//1.Elements are popped from the "back" of the specific container, //which is known as the top of the priority queue.//2.shall return true if a is considered to go before b // in the strict weak ordering the function defines#include 
#include
#include
#include
using namespace std;class Task{public: Task(int priority):priority_(priority) { } ~Task(){} int priority_; void DoWork() { cout << "DoWork: " << (int)this << " priority: " << priority_ << endl; }};class PriorityCompare{public: bool operator()(Task* t1,Task* t2) { return t1->priority_ > t2->priority_; } /* data */};int main(int argc, char const *argv[]){ PriorityCompare pc; priority_queue
,PriorityCompare> tasks(pc); Task t1(1); Task t2(10); Task t3(3); Task t4(1); Task t5(8); Task t6(9); tasks.push(&t1); tasks.push(&t2); tasks.push(&t3); tasks.push(&t4); tasks.push(&t5); tasks.push(&t6); while(!tasks.empty()) { Task* task = tasks.top(); tasks.pop(); task->DoWork(); } return 0;}

输出:

DoWork: 2293456 priority: 1DoWork: 2293444 priority: 1DoWork: 2293448 priority: 3DoWork: 2293440 priority: 8DoWork: 2293436 priority: 9DoWork: 2293452 priority: 10
參考: http://www.cplusplus.com/reference/queue/priority_queue/

转载地址:http://obtca.baihongyu.com/

你可能感兴趣的文章
gcc 各种参数
查看>>
sybase:JZ0SA: 已准备好的语句:没有设置输入参数,索引:54
查看>>
学习进度表_六周
查看>>
ceph集群性能测试结果
查看>>
Sass-数字运算
查看>>
Hello Tensorflow
查看>>
异常(异常)
查看>>
项目开发步骤
查看>>
XML文件外部写法--引入DTD规范
查看>>
创作型---原型模式(C# ICloneable接口的实现)
查看>>
GMM
查看>>
相似度计算常用方法综述
查看>>
光纤接口类型及光纤收发器指示灯图解
查看>>
static
查看>>
[NOIP2010]乌龟棋(DP)
查看>>
springmvc json乱码问题
查看>>
企业分布式微服务云SpringCloud SpringBoot mybatis (六)分布式配置中心(Spring Cloud Config)...
查看>>
逻辑回归
查看>>
linux下redis安装
查看>>
virtualbox安装centos 6.4 server 网络连接问题
查看>>