Ich möchte einen binären Heap mit Floats füllen - genauer gesagt möchte ich einen Min-Heap implementieren.
Es scheint, dass Floats Ord
nicht unterstützen und daher nicht sofort einsatzbereit sind. Meine Versuche, sie zu verpacken, sind bisher gescheitert. Es scheint jedoch, dass ich, wenn ich sie umschließen könnte, auch Ord
so implementieren könnte, dass es effektiv BinaryHeap
zu einem Min-Heap macht.
Hier ist ein Beispiel für einen Wrapper, den ich ausprobiert habe:
%Vor% Das Problem ist pop
returns gibt die Werte zurück, als wäre es ein Max-Heap.
Was genau muss ich tun, um BinaryHeap
mit f64
-Werten als Min-Heap zu füllen?
Anstatt Ihre eigene MinNonNan
zu schreiben, sollten Sie die Ordered-Float + Kisten revordieren .
Da Sie #[derive]
ing PartialOrd
sind, vergleichen die Methoden .gt()
, .lt()
usw. immer noch normal, d. h. MinNonNan(42.0) < MinNonNan(47.0)
ist immer noch wahr. Die Ord
-Begrenzung beschränkt Sie nur auf streng geordnete Typen. Dies bedeutet nicht, dass die Implementierung .cmp()
anstelle von <
/ >
/ <=
/ >=
verwendet, auch nicht der Compiler ändere diese Operatoren plötzlich, um die Ord
Implementierung zu verwenden.
Wenn Sie die Reihenfolge umkehren möchten, müssen Sie auch PartialOrd
neu implementieren.
Ich wollte ein grundlegendes Arbeitsbeispiel verfolgen, das auf der akzeptierten Antwort für zukünftige Menschen basiert, die auf dieses Problem stoßen:
%Vor%