Use std::cmp::Reverse with binary_search_by_key



如何将std::cmp::Reversebinary_search_by_key一起使用?示例:Rust Playground

Rust的Vec::binary_search_by_key的文档显示:

假设切片按关键字排序,例如使用相同的关键字提取函数sort_by_key

在下面的最小示例中,我使用了相同的提取函数,但运气不好。

use std::cmp::Reverse;
fn main() {
let mut v = vec![1, 2, 3, 4, 5];
v.sort_by_key(|&num| Reverse(num));
println!("{:?}", v);
let index = v.binary_search_by_key(&1, |&num| Reverse(num));
println!("Res: {:?}", index);
}

这抱怨不匹配的类型:";期望的整数,找到结构体std::cmp::Reverse";。

error[E0308]: mismatched types
--> src/main.rs:8:51
|
8 |     let index = v.binary_search_by_key(&1, |&num| Reverse(num));
|                                                   ^^^^^^^^^^^^ expected integer, found struct `std::cmp::Reverse`
|
= note: expected type `{integer}`
found struct `std::cmp::Reverse<{integer}>`

仔细检查函数签名可以得到答案。

pub fn binary_search_by_key<'a, B, F>(
&'a self,
b: &B,
f: F
) -> Result<usize, usize> where
B: Ord,
F: FnMut(&'a T) -> B, 

B是函数的返回值,也是第一个参数(在&self之后(。

因此,我们还必须将Reverse添加到第一个参数中:

v.binary_search_by_key(&Reverse(1), |&num| Reverse(num))

最新更新