怎么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);
}
Run Code Online (Sandbox Code Playgroud)
这抱怨不匹配的类型:“预期的整数,找到结构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}>`
Run Code Online (Sandbox Code Playgroud)
仔细检查函数签名会给出答案。
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,
Run Code Online (Sandbox Code Playgroud)
B
是函数的返回值,也是第一个参数(之后&self
)。
因此,我们还必须添加Reverse
到第一个参数:
v.binary_search_by_key(&Reverse(1), |&num| Reverse(num))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
168 次 |
最近记录: |