1

我想使用 a BinaryHeapwith 类型的元素MyWrapperStruct(Weak<MyStruct>),我在其中实现Ordfor MyWrapperStruct。在这个实现中,我需要升级弱引用,这可能会失败。如果他们失败了,我希望从堆中删除元素。

我如何以一种不需要我首先遍历整个堆以删除所有不可升级的弱引用的方式来实现这一点?这个堆里会有大量的数据,而其中只有极少数会失效。为了性能,我想避免遍历所有数据。

4

1 回答 1

3

在比较某些东西时,您不能删除一个项目。

另外,从我的角度来看,实现Ord是错误的,原因Ord与 Rust 中没有为浮点值实现的原因相同。如果您有两个不可升级的Weak结构,它们之间没有顺序,这就是PartialOrd存在的原因。

如果您真的想让您的示例工作,Ord请为您的类型实现并在最顶部订购 non-upgradable Weaks(例如,它始终是最大的元素),然后使用peekBinaryHeap检查它是否可升级;如果没有,请将其删除并获取下一个。
这是一个令人讨厌的 hack,但如果你想让你的东西正常工作,这可能是你最好的解决方案。

于 2018-11-17T12:36:23.670 回答