Google Go中的可重用优先级队列实现

如何在Google Go中为可重用的优先级队列编写代码,或者在每次需要优先级队列实现时都应该定义Less PushPop功能?


慕标5832272
浏览 225回答 4
4回答

白板的微信

后一种情况是必须要做的。就Go没有泛型而言,它是目前唯一可用的选项。

慕后森

还没有尝试过,但是如果您的案例碰巧适合某些限制条件,也许您可以使用反射和struct标签。您将要求您的可堆类型是在用于订购的字段上带有类似“ pq:“ Key”`之类的标签的结构,并且该字段类型必须<可比较。它远没有Less方法强大,但可以满足您的需求。抱歉,我没有适合您的示例代码。我认为这不会很困难,但是会花费我一些时间。离开去锻炼。如果遇到需要处理任意结构的情况,并且我可以忍受简单的键限制,则可以尝试这种技术。但是对于有限的类型集,我不会这样做。我只是按书来做,为每种类型分别实现heap.Interface。实际上,它不需要太多的工作,也不需要太多的代码行。

慕田峪9158850

container/vector在标准库的模块中曾经有矢量类型,这些矢量基于可调整大小的切片实现了这些方法,并且完美地用作了与heap模块一起使用的容器。不幸的是,他们摆脱了vector,我从未理解,因为它在slice变量上实现了很好的方法级抽象。所以,现在,有人用围棋堆模块每一次我看到,他们已经基本上重新实现的部分vector-写作Push,Pop,Length基于一个切片变量等。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go