我想用浮点数填充二进制堆——更具体地说,我想实现一个最小堆.
浮点数似乎不支持Ord
,因此无法开箱即用.到目前为止,我试图包装它们的try 都失败了.然而,似乎如果我可以包装它们,那么我也可以实现Ord
,以这样的方式,它将有效地使BinaryHeap
一分钟堆.
下面是一个我try 过的包装器示例:
#[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
返回的值就像它是一个最大堆.
要用f64
个值填充BinaryHeap
作为最小堆,我需要做什么?