mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-18 10:38:11 +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> {
|
pub fn drain_sorted(&mut self) -> DrainSorted<'_, T> {
|
||||||
DrainSorted { inner: self }
|
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> {
|
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
|
// old binaryheap failed this test
|
||||||
//
|
//
|
||||||
// Integrity means that all elements are present after a comparison panics,
|
// Integrity means that all elements are present after a comparison panics,
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#![feature(binary_heap_drain_sorted)]
|
#![feature(binary_heap_drain_sorted)]
|
||||||
#![feature(vec_remove_item)]
|
#![feature(vec_remove_item)]
|
||||||
#![feature(split_inclusive)]
|
#![feature(split_inclusive)]
|
||||||
|
#![feature(binary_heap_retain)]
|
||||||
|
|
||||||
use std::collections::hash_map::DefaultHasher;
|
use std::collections::hash_map::DefaultHasher;
|
||||||
use std::hash::{Hash, Hasher};
|
use std::hash::{Hash, Hasher};
|
||||||
|
Loading…
Reference in New Issue
Block a user