如何在Google Go中为可重用的优先级队列编写代码,或者在每次需要优先级队列实现时都应该定义Less Push和Pop功能?
4 回答
慕后森
TA贡献1802条经验 获得超5个赞
还没有尝试过,但是如果您的案例碰巧适合某些限制条件,也许您可以使用反射和struct标签。您将要求您的可堆类型是在用于订购的字段上带有类似“ pq:“ Key”`之类的标签的结构,并且该字段类型必须<可比较。它远没有Less方法强大,但可以满足您的需求。
抱歉,我没有适合您的示例代码。我认为这不会很困难,但是会花费我一些时间。离开去锻炼。
如果遇到需要处理任意结构的情况,并且我可以忍受简单的键限制,则可以尝试这种技术。但是对于有限的类型集,我不会这样做。我只是按书来做,为每种类型分别实现heap.Interface。实际上,它不需要太多的工作,也不需要太多的代码行。
慕田峪9158850
TA贡献1794条经验 获得超7个赞
container/vector
在标准库的模块中曾经有矢量类型,这些矢量基于可调整大小的切片实现了这些方法,并且完美地用作了与heap
模块一起使用的容器。不幸的是,他们摆脱了vector
,我从未理解,因为它在slice变量上实现了很好的方法级抽象。所以,现在,有人用围棋堆模块每一次我看到,他们已经基本上重新实现的部分vector
-写作Push
,Pop
,Length
基于一个切片变量等。
- 4 回答
- 0 关注
- 224 浏览
添加回答
举报
0/150
提交
取消