我想使用具有MyWrapperStruct(Weak<MyStruct>)
类型元素的BinaryHeap
,其中我为MyWrapperStruct
实现Ord
。在这个实现中,我需要升级弱引用,这可能会失败。如果它们失败,我希望从堆中删除该元素。
我如何实现这一点,而不需要首先遍历整个堆来删除所有不可升级的弱引用?这个堆中会有大量的数据,而其中只有极少数会变得无效。为了提高性能,我希望避免遍历所有数据。
在比较某个项目时,不能删除该项目。
此外,从我的角度来看,实现Ord
是错误的,原因与Rust中没有为浮点值实现Ord
的原因相同。如果您有两个不可升级的Weak
结构,它们之间没有顺序,这就是PartialOrd
存在的原因。
如果你真的想让你的例子发挥作用,那么为你的类型实现Ord
,并在最顶部订购不可升级的Weak
(例如,它总是最大的元素(,然后在你的BinaryHeap
上使用peek
来检查它是否可升级;如果没有,请将其移除,然后取下一个
这是一个令人讨厌的破解,但如果你想让你的东西发挥作用,这可能是你最好的解决方案。