免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6317 | 回复: 8
打印 上一主题 下一主题

[C++] 优先级队列的实现 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-26 09:35 |只看该作者 |倒序浏览
20可用积分
想用STL来实现个优先级队列,STL中已经有了一个基于堆的priority_queue优先级队列, 但是如果priority_queue中已经有10W的消息, 我想根据某个条件,将其中满足需求的消息优先级提前(这种操作可能会比较频繁),priority_queue又显得不那么适用了, 所以我想用map来做这个优先级队列,这样对队列中消息的查找和删除都比较方便,请问哪个高手对这种优先级队列有什么研究没~小弟先谢过了·

论坛徽章:
0
2 [报告]
发表于 2009-06-26 09:42 |只看该作者
没研究过优先级队列,随便说说
不知道你所说的满足需求是什么样的需求,
个人认为如果这个需求是某个可计算的值的话,可以按这个值做一个哈希函数,
当需要把消息提前的时候只要把相应的那个链表提前就行了。

就好像内核中优先级调度使用140个优先级队列一样的那种。

论坛徽章:
0
3 [报告]
发表于 2009-06-26 09:57 |只看该作者
我觉的这样还不如用几个优先级不同的队列

论坛徽章:
0
4 [报告]
发表于 2009-06-26 11:41 |只看该作者
原帖由 alexhappy 于 2009-6-26 09:57 发表
我觉的这样还不如用几个优先级不同的队列


那遇到这种情况你怎么办,  比如
1.A1先进入了优先级低的队列Q1,未被执行
2.A2后进入了优先级高的队列Q2
3.由于Q2优先级高,最后处理的时候,A2就有可能先于A1被执行,但是逻辑上是需要保证A1执行后,A2才能执行的

论坛徽章:
0
5 [报告]
发表于 2009-06-26 11:43 |只看该作者
什么意思?难道你不是相应优先级的消息进入相应优先级的队列的么?
为什么逻辑上要保证A2先于A1执行?既然这样,那岂不是A2高于A1?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
6 [报告]
发表于 2009-06-26 11:52 |只看该作者
优先级别队列,难道不是多个普通队列构成的么?

while(1)
{
   处理队列(A);
   处理队列(B);
   处理队列(C);
   .....
}

论坛徽章:
0
7 [报告]
发表于 2009-06-26 11:59 |只看该作者
原帖由 alexhappy 于 2009-6-26 11:43 发表
什么意思?难道你不是相应优先级的消息进入相应优先级的队列的么?
为什么逻辑上要保证A2先于A1执行?既然这样,那岂不是A2高于A1?



是的,比如客户做了一笔优先级低的业务A1, 然后又做了一笔优先级高的业务A2, 如果让A2先于A1执行话 ,会有逻辑错误的
原则上必须保证每个客户的业务是按时间流水被处理的。
所以目前只能 当有A2过来时,必须保证A1已经被做掉,如果A1还没有被处理,必须把A1的优先级提高,以便让A1被做掉,A2再被做掉

用多个优先级队列的话,只能这样做:从Q1中把A1删除,然后再把A1插到Q2中A2的前面。

从一个10W级的队列中 查找,然后在插入另外一个10W级的队列,这样的效率怎么保证呢

论坛徽章:
0
8 [报告]
发表于 2009-06-26 12:01 |只看该作者
原帖由 xinglp 于 2009-6-26 11:52 发表
优先级别队列,难道不是多个普通队列构成的么?

while(1)
{
   处理队列(A);
   处理队列(B);
   处理队列(C);
   .....
}



是这样就简单了,你这种事静态的优先级, 关键是还要实现优先级的动态调整 ,说白了,就是随时从A中提一个消息出来,插到C的某一个位置

论坛徽章:
0
9 [报告]
发表于 2009-06-26 12:19 |只看该作者
原则上必须保证每个客户的业务是按时间流水被处理的。

那么你让先做的一律成为高优先级不就完了?这样还用什么优先级队列啊。。。

[ 本帖最后由 alexhappy 于 2009-6-26 12:40 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP