haar_lib/ds/
ordered_set.rs1use crate::ds::ordered_map::*;
3
4#[derive(Default)]
6pub struct OrderedSet<K: Ord> {
7 map: OrderedMap<K, ()>,
8}
9
10impl<K: Ord> OrderedSet<K> {
11 pub fn new() -> Self {
13 Self {
14 map: OrderedMap::new(),
15 }
16 }
17
18 pub fn len(&self) -> usize {
20 self.map.len()
21 }
22
23 pub fn is_empty(&self) -> bool {
25 self.map.is_empty()
26 }
27
28 pub fn binary_search(&self, key: &K) -> Result<usize, usize> {
31 self.map.binary_search(key)
32 }
33
34 pub fn max_le(&self, key: &K) -> Option<&K> {
36 self.map.max_le(key).map(|(k, _)| k)
37 }
38
39 pub fn min_ge(&self, key: &K) -> Option<&K> {
41 self.map.min_ge(key).map(|(k, _)| k)
42 }
43
44 pub fn contains(&self, key: &K) -> bool {
46 self.map.contains(key)
47 }
48
49 pub fn insert(&mut self, key: K) -> bool {
51 self.map.insert(key, ()).is_some()
52 }
53
54 pub fn remove(&mut self, key: &K) -> bool {
56 self.map.remove(key).is_some()
57 }
58
59 pub fn get_by_index(&self, i: usize) -> Option<&K> {
61 self.map.get_by_index(i).map(|(k, _)| k)
62 }
63
64 pub fn remove_by_index(&mut self, i: usize) -> Option<K> {
66 self.map.remove_by_index(i).map(|(k, _)| k)
67 }
68
69 pub fn for_each(&self, mut f: impl FnMut(&K)) {
71 self.map.for_each(|k, _| f(k));
72 }
73
74 }