Skip to content

rinde/more_collections

Repository files navigation

More collections   Latest Version Docs badge License: Apache-2.0

Additional Rust collections not found in std::collections.

Small* collections

Built on top of the excellent smallvec crate, SmallMap and SmallSet are a Map and Set respectively that are inlined if they contain fewer values than a (statically chosen) capacity C, otherwise they are heap allocated and backed by an IndexMap.

Completion Name Behaves as
🟩🟩🟨⬜️⬜️ SmallMap IndexMap<K, V>
🟩🟩🟨⬜️⬜️ SmallSet IndexSet<T>
⬜️⬜️⬜️⬜️⬜️ SmallSortedMap BTreeMap<K, V>
⬜️⬜️⬜️⬜️⬜️ SmallSortedSet BTreeSet<T>

Multimaps

Completion Name Behaves as
🟩🟩🟩🟩🟨 HashSetMultimap HashMap<K, HashSet<V>>
🟩🟩🟩🟩🟨 HashVecMultimap HashMap<K, Vec<V>>
🟩🟩🟩🟩🟨 IndexSetMultimap IndexMap<K, IndexSet<V>>
🟩🟩🟩🟩🟨 IndexVecMultimap IndexMap<K, Vec<V>>
⬜️⬜️⬜️⬜️⬜️ BTreeSetMultimap BTreeMap<K, BTreeSet<V>>
⬜️⬜️⬜️⬜️⬜️ BTreeVecMultimap BTreeMap<K, Vec<V>>
⬜️⬜️⬜️⬜️⬜️ EnumHashSetMultimap EnumMap<K, HashSet<V>>
⬜️⬜️⬜️⬜️⬜️ EnumIndexSetMultimap EnumMap<K, IndexSet<V>>
⬜️⬜️⬜️⬜️⬜️ EnumVecMultimap EnumMap<K, Vec<V>>
⬜️⬜️⬜️⬜️⬜️ EnumEnumMultimap EnumMap<K, EnumSet<V>>

A detailed overview.

VecMap

Completion Name Drop-in replacement for Implemented as Distinguishing features
🟩🟩🟩🟨⬜️ VecMap IndexMap<K,V> Vec<Option<T>> Fast random access

Click here for a detailed description and overview of the API.

Multisets

Completion Name Behaves as
⬜️⬜️⬜️⬜️⬜️ IndexMultiset IndexMap<K,usize>
⬜️⬜️⬜️⬜️⬜️ HashMultiset HashMap<K,usize>
⬜️⬜️⬜️⬜️⬜️ BTreeMultiset BTreeMap<K,usize>
⬜️⬜️⬜️⬜️⬜️ EnumMultiset EnumMap<K,usize>

Some work is already done in this PR.