Go是否具有开箱即用的优先级队列?

时间:2015-06-14 09:17:55

标签: go

Go是否具有开箱即用的优先级队列(我可以从某个模块导入并优先使用python的priority queue)?

我知道优先级队列通常使用堆数据结构实现,并且有一个heap package,它还建议如何使用它来实现队列(在 Example(PriorityQueue)中) ,我可以很容易地抓住并使用它。

我的问题是这是一种推荐的方法,或者有一个我找不到的开箱即用优先级队列包?

1 个答案:

答案 0 :(得分:0)

引用维基百科:

  

优先级队列是一种抽象数据类型,它类似于常规队列或堆栈数据结构,但另外每个元素都具有"优先级"与之相关联。 [...]虽然优先级队列通常使用堆来实现,但它们在概念上与堆不同。优先级队列是一个抽象概念,如"列表"或者"地图&#34 ;;

Go提供了一些在大多数应用程序中使用的基本数据结构,但是将更专业的数据结构实现给程序员。例如,go map可用于轻松实现集合。

您链接的

The example使用切片[]*Item来表示更抽象的类型heap.Interface以及(甚至更抽象的)类型PriorityQueue。 Go是关于组合的,我会说在堆操作方面实现PriorityQueue是很好的做法。

这使您可以作为程序员进行控制。如果您想要线程安全,请使用PriorityQueuesync.Mutex的组合使其线程安全。如果你想要一个不同于堆的实现,可以使PriorityQueue成为一个接口,你可以随意实现它。

当然,这是一种权衡。在这种情况下,实现了大约25行代码。如果实施数百行,您可能想要找到已经完成此操作的包。