如果要二分搜索某个特定值,可以用binary_search
:
https://doc.rust-lang.org/stable/std/primitive.slice.html#method.binary_search
如果要实现C++里的lower_bound和upper_bound类似的功能,可以用partition_point
:
https://doc.rust-lang.org/stable/std/primitive.slice.html#method.partition_point
pub fn partition_point<P>(&self, pred: P) -> usize where
P: FnMut(&T) -> bool,
返回第一个使得pred
返回false的元素的下标,与C++里的partition_point
一样:
http://cplusplus.com/reference/algorithm/partition_point/?kw=partition_point
例子:
fn main() {
let a = [1, 2, 3, 3, 4];
// Lower bound
println!("{}", a.partition_point(|x| *x < 3));
// Upper bound
println!("{}", a.partition_point(|x| *x <= 3));
}
2
4