[C/C++标准库]_[0基础]_[优先队列priority_queue的使用]
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 <stdlib.h>
#include <iostream>
#include <queue>
#include <vector>
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<Task*,std::vector<Task*>,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: 1
DoWork: 2293444 priority: 1
DoWork: 2293448 priority: 3
DoWork: 2293440 priority: 8
DoWork: 2293436 priority: 9
DoWork: 2293452 priority: 10
參考: http://www.cplusplus.com/reference/queue/priority_queue/
[C/C++标准库]_[0基础]_[优先队列priority_queue的使用]的更多相关文章
- [Zlib]_[0基础]_[使用zlib库压缩文件]
场景: 1. WIndows上没找到系统提供的win32 api来生成zip压缩文件, 有知道的大牛麻烦留个言. 2. zlib比較经常使用,编译也方便,使用它来做压缩吧. MacOSX平台默认支持z ...
- [C/C++标准库]_[0基础]_[交集和补集]
场景: 1. 计算std::vector A和 std::vector B里的同样的元素, 用于保留不删除. 2. 计算std::vector A和 std::vector B里各自的补集, 用于删除 ...
- [libcurl]_[0基础]_[使用libcurl下载大文件]
场景: 1. 在Windows编程时, 下载http页面(html,xml)能够使用winhttp库,可是并非非常下载文件,由于会失败. 由此引出了WinINet库,无奈这个库的稳定性比較低,使用样例 ...
- [zlib]_[0基础]_[使用Zlib完整解压zip内容]
场景: 1. 解压文件一般用在下载了一个zip文件之后解压,或者分析某个文件须要解压的操作上. 2. 解压文件,特别是解压带目录的zip文件往往系统没有提供这类Win32 API,当然C#自带库能解压 ...
- [C/C++标准库]_[0基础]_[使用fstream合并文本文件]
场景: 1. 就是合并文本文件,而且从第2个文件起不要合并第一行. 2. 多加了一个功能,就是支持2个以上的文件合并. 3. 问题: http://ask.csdn.net/questions/192 ...
- [C/C++标准库]_[0基础]_[怎样实现std::string自己的Format(sprintf)函数]
场景: 1. C语言有自己的sprintf函数,可是这个函数有个缺点,就是不知道须要创建多大的buffer, 这时候能够使用snprintf函数来计算大小,仅仅要參数 buffer为NULL, co ...
- [Windows]_[0基础]_[Release程序的崩溃报告minidump解决方式]
场景: 1. Release的程序崩溃时,崩溃报告能够让开发者查明代码哪里出了问题,用处大大的. 2. 仅仅实用VS的编译器才支持,所以MinGW就无缘了. 3. 使用了未处理异常过滤处理函数. 4. ...
- [ATL/WTL]_[0基础]_[CBitmap复制图片-截取图片-平铺图片]
场景: 1.当你须要截取图片部分区域作为某个控件的背景. 2.须要平铺图片到一个大区域让他自己主动放大时. 3.或者须要合并图片时. 代码: CDC sdc; CDC ddc; sdc.CreateC ...
- [网络]_[0基础]_[使用putty备份远程数据]
场景: 1. putty是windows上訪问linux服务的免费client之中的一个.用它来ssh到远程server备份数据是常见的做法(在没做好自己主动备份机制前), 通过putty界面尽管也不 ...
随机推荐
- Blast使用详解
Blast,全称Basic Local Alignment Search Tool,即"基于局部比对算法的搜索工具",由Altschul等人于1990年发布.Blast能够实现比较 ...
- selenium webdriver 学习笔记(二)
selenium webdriver 一.定位一组元素: webdriver可以很方便的使用findElement 方法来定位某个物定的对象.不过有时候我们却要定位一组对象,这时候就需要使用findE ...
- MFC 全部自绘控件 界面库
http://download.csdn.net/detail/q97082645/8160793 http://download.csdn.net/user/q97082645/uploads/3
- NOI2014 Day1
NOI2014 Day1 起床困难综合症 题目描述:给出\(n\)个操作,每个操作包含一种运算\((XOR.OR.AND)\)和一个数,已知一开始的数字为\([0, m]\),问经过\(n\)次操作后 ...
- Pascal 线段树 lazy-tag 模板
先说下我的代码风格(很丑,勿喷) maxn表示最大空间的四倍 tree数组表示求和的线段树 delta表示增减的增量标记 sign表示覆盖的标记 delta,sign实际上都是lazy标志 pushd ...
- mysql关联更新
update tb_sdd_info a,tb_bnm_evian_info b set a.username=b.username where a.username=b.memberno and ...
- JavaScript 开发经验整理
前言 今年接触了一个B/S的项目,总结了一些JavaScript开发经验,整理些有用的内容与大家分享. 本文会持续更新... 1.实现代码访问的控制 随着项目JavaScript代码库扩大,本应被控制 ...
- Ext.Net 使用总结之GridPanel中的选中行
1.判断GridPanel中是否选中了某行 if (!GridPanel1.hasSelection()) { Ext.Msg.alert("提示", "请选择记录!&q ...
- ##DAY15——UICollectionView
DAY15——UICollectionView 创建UICollectionView //创建一个布局对象,采用系统布局类UICollectionViewFlowLayout UICollection ...
- leetcode Integer to Roman python
class Solution(object): def intToRoman(self, num): """ :type num: int :rtype: str &qu ...