如果二进制堆无法<T>升级到强引用,如何从二进制堆中删除弱值?



我想使用具有MyWrapperStruct(Weak<MyStruct>)类型元素的BinaryHeap,其中我为MyWrapperStruct实现Ord。在这个实现中,我需要升级弱引用,这可能会失败。如果它们失败,我希望从堆中删除该元素。

我如何实现这一点,而不需要首先遍历整个堆来删除所有不可升级的弱引用?这个堆中会有大量的数据,而其中只有极少数会变得无效。为了提高性能,我希望避免遍历所有数据。

在比较某个项目时,不能删除该项目。

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

如果你真的想让你的例子发挥作用,那么为你的类型实现Ord,并在最顶部订购不可升级的Weak(例如,它总是最大的元素(,然后在你的BinaryHeap上使用peek来检查它是否可升级;如果没有,请将其移除,然后取下一个
这是一个令人讨厌的破解,但如果你想让你的东西发挥作用,这可能是你最好的解决方案。

相关内容

  • 没有找到相关文章

最新更新