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 count(&self, l: &K, r: &K) -> usize {
36 let r = match self.binary_search(r) {
37 Ok(i) | Err(i) => i,
38 };
39 let l = match self.binary_search(l) {
40 Ok(i) | Err(i) => i,
41 };
42 r.saturating_sub(l)
43 }
44
45 pub fn max_le(&self, key: &K) -> Option<&K> {
47 self.map.max_le(key).map(|(k, _)| k)
48 }
49
50 pub fn min_ge(&self, key: &K) -> Option<&K> {
52 self.map.min_ge(key).map(|(k, _)| k)
53 }
54
55 pub fn contains(&self, key: &K) -> bool {
57 self.map.contains(key)
58 }
59
60 pub fn insert(&mut self, key: K) -> bool {
62 self.map.insert(key, ()).is_some()
63 }
64
65 pub fn remove(&mut self, key: &K) -> bool {
67 self.map.remove(key).is_some()
68 }
69
70 pub fn get_by_index(&self, i: usize) -> Option<&K> {
72 self.map.get_by_index(i).map(|(k, _)| k)
73 }
74
75 pub fn remove_by_index(&mut self, i: usize) -> Option<K> {
77 self.map.remove_by_index(i).map(|(k, _)| k)
78 }
79
80 pub fn for_each(&self, mut f: impl FnMut(&K)) {
82 self.map.for_each(|k, _| f(k));
83 }
84
85 }