为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕标5832272 2021-05-20 18:14:49
如何在Google Go中为可重用的优先级队列编写代码,或者在每次需要优先级队列实现时都应该定义Less Push和Pop功能?
查看完整描述

4 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

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


查看完整回答
反对 回复 2021-05-24
?
慕后森

TA贡献1802条经验 获得超5个赞

还没有尝试过,但是如果您的案例碰巧适合某些限制条件,也许您可以使用反射和struct标签。您将要求您的可堆类型是在用于订购的字段上带有类似“ pq:“ Key”`之类的标签的结构,并且该字段类型必须<可比较。它远没有Less方法强大,但可以满足您的需求。

抱歉,我没有适合您的示例代码。我认为这不会很困难,但是会花费我一些时间。离开去锻炼。

如果遇到需要处理任意结构的情况,并且我可以忍受简单的键限制,则可以尝试这种技术。但是对于有限的类型集,我不会这样做。我只是按书来做,为每种类型分别实现heap.Interface。实际上,它不需要太多的工作,也不需要太多的代码行。


查看完整回答
反对 回复 2021-05-24
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

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


查看完整回答
反对 回复 2021-05-24
  • 4 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信