rust - 将 std::cmp::Reverse 与 binary_search_by_key 一起使用
问题描述
怎么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))
推荐阅读
- cassandra - Ansible 服务模块在服务实际运行时返回服务状态为已停止
- python - 在同一图形上绘制多条线来自 Matplotlib
- android - 所有 gms 库必须使用与地点和地图完全相同的版本
- spring-boot - 如何解决 SQLException - Spring Boot 中的数据转换错误
- ios - 为 UIView 设置动画以“弯曲”到目的地而不是直线前进
- c - 从二叉搜索树打印级别和节点
- selenium - 如何从下拉框中选择建议值
- material-ui - 如何使用带有 Formik 的 Switch 组件(material-ui)修复可选字段的验证
- redis - 返回节点名称而不是类型/标签?
- reflection - 如何使用私有构造函数反映导入包中的类?