Usando max_by_key em um vetor de carros alegóricos
Eu quero usarmax_by_key
para obter o valor máximo de um vetor def64
s com base em uma determinada chave. Este é um exemplo simples, com um pequeno vetor eabs
como a chave:
let a: Vec<f64> = vec![-3.0, 0.2, 1.4];
*a.iter().max_by_key(|n| n.abs()).unwrap()
No entanto, desdef64
não implementaOrd
, Eu recebo
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`
Similarmente,sort_by_key
falha com o mesmo erro:
a.sort_by_key(|n| n.abs())
Eu sei que posso contornar a restrição de pedidos parciais para classificar um vetor de carros alegóricos comsort_by
b.sort_by(|m, n| m.partial_cmp(n).unwrap_or(Less))
mas isso teria que ser chamado em um vetorb
para o qual calculei a chave (neste casoabs
) para cada elemento dea
, e então eu teria que voltar e encontrar o elemento correspondente dea
, o que parece complicado e lento. À medida que o número de itens na lista aumenta, eu gostaria de minimizar as passagens pelos dados.
Existem soluções alternativas?