More collections

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.