Go是否有现成的优先级队列?

Go是否有现成的优先级队列?,go,Go,Go是否有现成的优先级队列,即我可以从某个模块导入并像python一样开始使用的队列 我知道优先级队列通常是使用堆数据结构实现的,go有一个,这也建议如何使用它来实现示例PriorityQueue中的队列,我可以很容易地获取和使用它 我的问题是,这是一种推荐的方法,还是有一个现成的优先级队列包我找不到?引用维基百科: 优先级队列是一种抽象数据类型,类似于常规队列或堆栈数据结构,但每个元素都有与其关联的优先级。[…]虽然优先级队列通常使用堆实现,但它们在概念上与堆不同。优先级队列是一个抽象概念,如

Go是否有现成的优先级队列,即我可以从某个模块导入并像python一样开始使用的队列

我知道优先级队列通常是使用堆数据结构实现的,go有一个,这也建议如何使用它来实现示例PriorityQueue中的队列,我可以很容易地获取和使用它

我的问题是,这是一种推荐的方法,还是有一个现成的优先级队列包我找不到?

引用维基百科:

优先级队列是一种抽象数据类型,类似于常规队列或堆栈数据结构,但每个元素都有与其关联的优先级。[…]虽然优先级队列通常使用堆实现,但它们在概念上与堆不同。优先级队列是一个抽象概念,如列表或映射

Go提供了一些在大多数应用程序中使用的基本数据结构,但将更专业的数据结构的实现留给程序员。例如,go映射可以用来实现一个集合

链接到使用一个slice[]*项来表示更抽象的类型heap.Interface,以及更抽象的类型PriorityQueue。Go是关于组合的,我想说,在堆操作方面实现PriorityQueue是一个很好的实践

这使您可以作为程序员进行控制。如果您想要线程安全,请使用PriorityQueue和sync.Mutex的组合来实现线程安全。如果您想要一个不同于堆的实现,请将PriorityQueue设置为一个接口,您可以根据需要实现它


当然有一个权衡。在本例中,实现大约需要25行代码。如果实现是数百行,您可能希望找到一个已经完成了这项工作的包。

真的有那么糟糕吗?Python的Queue.PriorityQueue不是获取优先级队列的推荐方法,除非您特别想使用它在线程之间交换信息;它有一大堆与同步相关的开销,一些基本的容器操作有奇怪的名称,因为这些操作在多线程上下文中没有多大意义。@user2357112谢谢您的评论,但我从来没有说过python中推荐使用Queue.PriorityQueue。我只是把它作为简单导入模块的一个例子,我不想提及heapq,因为我担心人们会误解它,因为我正在寻找一个堆模块。我正在寻找的是在围棋中使用优先队列的推荐方法。我不知道还有比你的问题中提到的更好的方法。@Not_a_高尔夫球手这很可悲。但谢谢你澄清这一点,谢谢。只是觉得奇怪,C++给出了这样的抽象,然后决定给我控制。为什么不让我控制我的堆,我的排序两个实现都不会很大。停止我的咆哮。