Verwenden von max_by_key auf einen Vektor von floats

Ich möchte benutzenmax_by_key, um den Maximalwert aus einem Vektor von @ zu erhaltf64s basierend auf einem bestimmten Schlüssel. Dies ist ein einfaches Beispiel mit einem kleinen Vektor undabs als Schlüssel:

let a: Vec<f64> = vec![-3.0, 0.2, 1.4];
*a.iter().max_by_key(|n| n.abs()).unwrap()

Jedoch, seitf64 implementiert nichtOrd, Ich bekomm

    error[E0277]: the trait bound `f64: std::cmp::Ord` is not satisfied
 --> src/main.rs:3:15
  |
3 |     *a.iter().max_by_key(|n| n.abs()).unwrap();
  |               ^^^^^^^^^^ the trait `std::cmp::Ord` is not implemented for `f64`

Ähnlich,sort_by_key schlägt mit demselben Fehler fehl:

a.sort_by_key(|n| n.abs())

Ich weiß, dass ich die Einschränkung der teilweisen Reihenfolge umgehen kann, um einen Vektor von Floats mit @ zu sortieresort_by

b.sort_by(|m, n| m.partial_cmp(n).unwrap_or(Less))

Aber das müsste auf einem Vektor aufgerufen werdenb für die ich den Schlüssel berechnet habe (in diesem Fallabs) für jedes Element vona, und dann müsste ich zurückgehen und das entsprechende Element von @ finda, was kompliziert und langsam erscheint. Wenn die Anzahl der Elemente in der Liste zunimmt, möchte ich die Datenübergänge minimieren.

Gibt es irgendwelche Workarounds?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage