Usando max_by_key en un vector de flotadores
Quiero usarmax_by_key
para obtener el valor máximo de un vector def64
s basado en una determinada clave. Este es un ejemplo simple, con un pequeño vector yabs
como la clave:
let a: Vec<f64> = vec![-3.0, 0.2, 1.4];
*a.iter().max_by_key(|n| n.abs()).unwrap()
Sin embargo, desdef64
no implementaOrd
, Yo obtengo
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`
Similar,sort_by_key
falla con el mismo error:
a.sort_by_key(|n| n.abs())
Sé que puedo sortear la restricción de ordenamiento parcial para ordenar un vector de flotadores consort_by
b.sort_by(|m, n| m.partial_cmp(n).unwrap_or(Less))
pero eso debería llamarse en un vectorb
para lo cual he calculado la clave (en este casoabs
) para cada elemento dea
, y luego tendría que regresar y encontrar el elemento correspondiente dea
, lo que parece complicado y lento. A medida que crece el número de elementos en la lista, me gustaría minimizar los pases a través de los datos.
¿Hay alguna solución?