Wie kann ich mit Rusts BinaryHeap einen Min-Heap von f64 implementieren?
Ich möchte einen binären Heap mit Floats füllen - genauer gesagt, ich möchte einen Min-Heap implementieren.
Es scheint, dass Floats @ nicht unterstützOrd
und sind daher nicht sofort verwendbar. Meine Versuche, sie einzuwickeln, sind bisher gescheitert. Es scheint jedoch, dass ich, wenn ich sie einpacken könnte, auch @ implementieren könntOrd
so, dass es effektiv machen würdeBinaryHeap
ein min-Haufen.
Hier ist ein Beispiel für einen Wrapper, den ich ausprobiert habe:
#[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
}
}
}
Das Problem istpop
gibt die Werte zurück, als wäre es ein Max-Heap.
Was genau muss ich tun, um ein @ auszufülleBinaryHeap
mitf64
Werte als Min-Heap?