1use std::collections::HashSet;
4
5#[derive(Default, Clone)]
6pub struct VecSet<T> {
7 set: HashSet<T>,
8 vec: Vec<T>,
9}
10
11impl<T> VecSet<T>
12where
13 T: Clone + Eq + std::hash::Hash,
14{
15 pub fn len(&self) -> usize {
16 self.set.len()
17 }
18
19 pub fn insert(&mut self, elem: T) {
20 assert_eq!(self.set.len(), self.vec.len());
21 let was_new = self.set.insert(elem.clone());
22 if was_new {
23 self.vec.push(elem);
24 }
25 }
26
27 pub fn get(&self, index: usize) -> Option<&T> {
28 self.vec.get(index)
29 }
30}