Использование max_by_key для вектора с плавающей точкой

Я хочу использоватьmax_by_key чтобы получить максимальное значение из вектораf64на основе определенного ключа. Это простой пример с небольшим вектором иabs в качестве ключа:

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

Тем не менее, так какf64 не реализуетOrd, Я получил

    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`

Так же,sort_by_key терпит неудачу с той же ошибкой:

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

Я знаю, что могу обойти ограничение частичного упорядочения для сортировки вектора чисел сsort_by

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

но это должно быть вызвано на векторb для которого я вычислил ключ (в данном случаеabs) для каждого элементаaи тогда мне придется вернуться и найти соответствующий элементa, который кажется сложным и медленным. По мере роста количества элементов в списке я бы хотел минимизировать количество проходов через данные.

Есть ли обходные пути?

Ответы на вопрос(1)

Ваш ответ на вопрос