我想用浮点数填充二进制堆——更具体地说,我想实现一个最小堆。
浮动似乎不支持Ord
,因此不能开箱即用。到目前为止,我试图包装它们的尝试都失败了。然而,似乎如果我可以包装它们,那么我也可以Ord
以这样一种方式实现,它可以有效地形成BinaryHeap
一个最小堆。
这是我尝试过的包装器示例:
#[derive(PartialEq, PartialOrd)]
struct MinNonNan(f64);
impl Eq for MinNonNan {}
impl Ord for MinNonNan {
fn cmp(&self, other: &MinNonNan) -> Ordering {
let ord = self.partial_cmp(other).unwrap();
match ord {
Ordering::Greater => Ordering::Less,
Ordering::Less => Ordering::Greater,
Ordering::Equal => ord
}
}
}
问题是pop
返回值,就好像它是一个最大堆一样。
我到底需要做什么才能将值填充BinaryHeap
为f64
最小堆?