Использование 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
, который кажется сложным и медленным. По мере роста количества элементов в списке я бы хотел минимизировать количество проходов через данные.
Есть ли обходные пути?