具有两个优先级值的优先级队列

2024-01-03

众所周知,插入优先级队列的元素具有确定其优先级的值。例如,如果我有五个元素A,B,C,D,E具有优先级(我们称之为优先级值priorityI): A = 10, B = 5, C = 1, D = 3, E = 2。 但是我如何编写一个可以定义两个优先级值的优先级队列,我的意思是: 如果两个元素具有相同的值priorityI,然后值priorityII决定应该首先采用哪个元素,例如:

element A has priorityI = 3, and prioriotyII = 5
element B has priorityI = 3, and prioriotyII = 1

那么第一个元素 B 将首先从队列中取出。


从Python2.6开始,可以使用队列.优先级队列 http://docs.python.org/library/queue.html#Queue.PriorityQueue.

插入队列的项目根据它们的顺序进行排序__cmp__ http://docs.python.org/reference/datamodel.html#object.__cmp__方法,因此只需为要插入队列的对象的类实现一个方法即可。

请注意,如果您的项目由对象元组组成,则不需要为元组实现容器类,因为内置元组比较实现 https://stackoverflow.com/a/5292332/3903832可能符合您的需求,如上所述(首先弹出价值较低的项目)。不过,您可能需要实施__cmp__其对象驻留在元组中的类的方法。

>>> from Queue import PriorityQueue
>>> priority_queue = PriorityQueue()
>>> priority_queue.put((1, 2))
>>> priority_queue.put((1, 1))
>>> priority_queue.get()
(1, 1)
>>> priority_queue.get()
(1, 2)

EDIT:正如 @Blckknght 指出的,如果您的优先级队列仅由单个线程使用,则heapq http://docs.python.org/library/heapq.html从Python2.3 开始提供的模块是首选解决方案。如果有,请参考他的回答 https://stackoverflow.com/a/25233779/3903832.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有两个优先级值的优先级队列 的相关文章

随机推荐