mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-06 04:08:40 +00:00
Add BinaryHeap::retain as suggested in #42849
This commit is contained in:
parent
00f677d897
commit
787eddc1ab
@ -665,6 +665,34 @@ impl<T: Ord> BinaryHeap<T> {
|
||||
pub fn drain_sorted(&mut self) -> DrainSorted<'_, T> {
|
||||
DrainSorted { inner: self }
|
||||
}
|
||||
|
||||
/// Retains only the elements specified by the predicate.
|
||||
///
|
||||
/// In other words, remove all elements `e` such that `f(&e)` returns
|
||||
/// `false`. The elements are visited in unsorted (and unspecified) order.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(binary_heap_retain)]
|
||||
/// use std::collections::BinaryHeap;
|
||||
///
|
||||
/// let mut heap = BinaryHeap::from(vec![-10, -5, 1, 2, 4, 13]);
|
||||
///
|
||||
/// heap.retain(|x| x % 2 == 0); // only keep even numbers
|
||||
///
|
||||
/// assert_eq!(heap.into_sorted_vec(), [-10, 2, 4])
|
||||
/// ```
|
||||
#[unstable(feature = "binary_heap_retain", issue = "71503")]
|
||||
pub fn retain<F>(&mut self, f: F)
|
||||
where
|
||||
F: FnMut(&T) -> bool,
|
||||
{
|
||||
self.data.retain(f);
|
||||
self.rebuild();
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> BinaryHeap<T> {
|
||||
|
@ -372,6 +372,14 @@ fn assert_covariance() {
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_retain() {
|
||||
let mut a = BinaryHeap::from(vec![-10, -5, 1, 2, 4, 13]);
|
||||
a.retain(|x| x % 2 == 0);
|
||||
|
||||
assert_eq!(a.into_sorted_vec(), [-10, 2, 4])
|
||||
}
|
||||
|
||||
// old binaryheap failed this test
|
||||
//
|
||||
// Integrity means that all elements are present after a comparison panics,
|
||||
|
@ -14,6 +14,7 @@
|
||||
#![feature(binary_heap_drain_sorted)]
|
||||
#![feature(vec_remove_item)]
|
||||
#![feature(split_inclusive)]
|
||||
#![feature(binary_heap_retain)]
|
||||
|
||||
use std::collections::hash_map::DefaultHasher;
|
||||
use std::hash::{Hash, Hasher};
|
||||
|
Loading…
Reference in New Issue
Block a user