diff options
| author | Vojtech Kral <vojtech@kral.hk> | 2021-04-13 00:10:03 +0200 |
|---|---|---|
| committer | Vojtech Kral <vojtech@kral.hk> | 2021-04-15 23:23:22 +0200 |
| commit | bccbf9db1c799b4848c1742ddc6170e8fa94c965 (patch) | |
| tree | 55be1c8f43634820c43948728515544ef8c2f428 | |
| parent | 60158f4a7cf3e3063df6127d3f0d206921d285b0 (diff) | |
| download | rust-bccbf9db1c799b4848c1742ddc6170e8fa94c965.tar.gz rust-bccbf9db1c799b4848c1742ddc6170e8fa94c965.zip | |
VecDeque: binary_search_by(): return right away if hit found at back.first() #78021
| -rw-r--r-- | library/alloc/src/collections/vec_deque/mod.rs | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/library/alloc/src/collections/vec_deque/mod.rs b/library/alloc/src/collections/vec_deque/mod.rs index d3e70991ad5..e6436016711 100644 --- a/library/alloc/src/collections/vec_deque/mod.rs +++ b/library/alloc/src/collections/vec_deque/mod.rs @@ -2481,8 +2481,11 @@ impl<T> VecDeque<T> { F: FnMut(&'a T) -> Ordering, { let (front, back) = self.as_slices(); + let cmp_back = back.first().map(|elem| f(elem)); - if let Some(Ordering::Less | Ordering::Equal) = back.first().map(|elem| f(elem)) { + if let Some(Ordering::Equal) = cmp_back { + Ok(front.len()) + } else if let Some(Ordering::Less) = cmp_back { back.binary_search_by(f).map(|idx| idx + front.len()).map_err(|idx| idx + front.len()) } else { front.binary_search_by(f) |
