use core::iter::Peekable; /// A iterator for deduping the key of a sorted iterator. /// When encountering the duplicated key, only the last key-value pair is yielded. /// /// Used by [`BTreeMap::bulk_build_from_sorted_iter`]. pub struct DedupSortedIter where I: Iterator, { iter: Peekable, } impl DedupSortedIter where I: Iterator, { pub fn new(iter: I) -> Self { Self { iter: iter.peekable() } } } impl Iterator for DedupSortedIter where K: Eq, I: Iterator, { type Item = (K, V); fn next(&mut self) -> Option<(K, V)> { loop { let next = match self.iter.next() { Some(next) => next, None => return None, }; let peeked = match self.iter.peek() { Some(peeked) => peeked, None => return Some(next), }; if next.0 != peeked.0 { return Some(next); } } } }