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
.