如何将std::cmp::Reverse
与binary_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))