如何将项目放入优先级队列?

发布于 2021-01-29 15:08:21

在Python文档中,

最低值的条目首先被检索(最低值的条目是由返回的条目sorted(list(entries))[0])。条目的典型模式是形式为的元组(priority_number, data)

看来队列将按优先级排序,然后按数据排序,这可能并不总是正确的。假设数据“项目2”在“项目1”之前入队,则项目1仍将排在第一位。在另一个文档页面heapq中,它建议使用计数器。所以我将数据存储为entry = [priority, count, task]。是否没有类似的东西

PriorityQueue.put(item, priority)

那我就不需要自己执行订购吗?

关注者
0
被浏览
94
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    据我所知,您要找的东西不是开箱即用的。无论如何,请注意,实现起来并不难:

    from Queue import PriorityQueue
    
    class MyPriorityQueue(PriorityQueue):
        def __init__(self):
            PriorityQueue.__init__(self)
            self.counter = 0
    
        def put(self, item, priority):
            PriorityQueue.put(self, (priority, self.counter, item))
            self.counter += 1
    
        def get(self, *args, **kwargs):
            _, _, item = PriorityQueue.get(self, *args, **kwargs)
            return item
    
    
    queue = MyPriorityQueue()
    queue.put('item2', 1)
    queue.put('item1', 1)
    
    print queue.get()
    print queue.get()
    

    输出示例:

    item2
    item1
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看