Rust的std::collections::BinaryHeap默认是大顶堆,然而真实世界里遇到小顶堆的情况并不算少,我很好奇大家是怎么处理这个问题的。
a) 按官方文档,使用std::cmp::Reverse
b) 对,比如说,std::collections::BinaryHeap<i32>,在确定数据不存在-2147483648的时候,存储-x而不是x,pop的时候记得取反就好
c)复制BinaryHeap的源代码,然后整一个新的小顶堆
(似乎binary_search也有类似问题——有时候我们需要的并不是Ok(x)和Err(x),而是,比如说x的最小可能值(Ok(x)的可能值,特别是slice[x]附近的元素都相等的时候,并不唯一)
很好奇大家是怎么处理类似问题的
或者说,有没有一个更优美的d)选项
1
共 4 条评论, 1 页
评论区
写评论我喜欢参考官方文档,所以用的
Reverse。一般还是按照官方文档给的
std::reversed来写的。要是标准库能封一层小根堆就好了。复杂类型自己实现
PartialOrd,Ord,好像没有其他的方法了吧。如果是primitive类型的话,可以直接用
Reverse.