Sha256: 603eb34314c01769ff7f6def2a24cf7a7b38507e6f3658b7aafc23a3b2e9b322

Contents?: true

Size: 669 Bytes

Versions: 25

Compression:

Stored size: 669 Bytes

Contents

use alloc::collections::BinaryHeap;
use core::cmp::Ord;

pub(crate) fn k_smallest<T: Ord, I: Iterator<Item = T>>(mut iter: I, k: usize) -> BinaryHeap<T> {
    if k == 0 { return BinaryHeap::new(); }

    let mut heap = iter.by_ref().take(k).collect::<BinaryHeap<_>>();

    iter.for_each(|i| {
        debug_assert_eq!(heap.len(), k);
        // Equivalent to heap.push(min(i, heap.pop())) but more efficient.
        // This should be done with a single `.peek_mut().unwrap()` but
        //  `PeekMut` sifts-down unconditionally on Rust 1.46.0 and prior.
        if *heap.peek().unwrap() > i {
            *heap.peek_mut().unwrap() = i;
        }
    });

    heap
}

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
wasmtime-18.0.3 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-17.0.1 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-17.0.0 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-16.0.0 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-15.0.1 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-15.0.0 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-14.0.4 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-14.0.3 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-14.0.1 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-14.0.0 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-13.0.0 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-12.0.1 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-12.0.0 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-11.0.0 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-10.0.1 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-10.0.0 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-9.0.4 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-9.0.1 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-8.0.0 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs
wasmtime-7.0.0 ./ext/cargo-vendor/itertools-0.10.5/src/k_smallest.rs