首页 > 解决方案 > 将 std::cmp::Reverse 与 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}>`

标签: rust

解决方案


仔细检查函数签名给出了答案。

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))

推荐阅读