From ed1bd67b86cc15aeef3a99a4868807d314976f06 Mon Sep 17 00:00:00 2001 From: Michael Bradley Date: Fri, 31 Jan 2025 01:59:03 -0500 Subject: [PATCH] Properly handle duplicates in IBH from_iter --- src/backing/indexed/binary_heap.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/backing/indexed/binary_heap.rs b/src/backing/indexed/binary_heap.rs index 9c69025..05c73e6 100644 --- a/src/backing/indexed/binary_heap.rs +++ b/src/backing/indexed/binary_heap.rs @@ -124,8 +124,12 @@ impl Fr fn from_iter>(iter: T) -> Self { let mut this = Self::new(); for (i, (data, priority)) in iter.into_iter().enumerate() { - this.indices.insert(data.clone(), i); - this.data.push(Pair::new(data, priority)); + if let Some(prev) = this.indices.insert(data.clone(), i) { + this.indices.insert(data.clone(), prev).unwrap(); + this.data[prev] = Pair::new(data, priority); + } else { + this.data.push(Pair::new(data, priority)); + } } for i in (0..=(this.data.len() / 2)).rev() { this.sift_down(i).expect("Index error during heapify");