#set #map


An ordered set data structure, optimized for stack-allocated storage of a tiny number of elements with a fixed cap

5 releases

Uses new Rust 2021

0.2.1 Feb 8, 2022
0.2.0 Feb 1, 2022
0.1.2 Jan 26, 2022
0.1.1 Jan 21, 2022
0.1.0 Jan 21, 2022

#766 in Data structures

Download history 50/week @ 2022-03-09 74/week @ 2022-03-16 80/week @ 2022-03-23 123/week @ 2022-03-30 83/week @ 2022-04-06 121/week @ 2022-04-13 45/week @ 2022-04-20 145/week @ 2022-04-27 169/week @ 2022-05-04 154/week @ 2022-05-11 240/week @ 2022-05-18 205/week @ 2022-05-25 188/week @ 2022-06-01 158/week @ 2022-06-08 105/week @ 2022-06-15 106/week @ 2022-06-22

582 downloads per month
Used in 2 crates (via leafwing-input-manager)


792 lines


Array-backed ordered set and map data structures in Rust, optimized for stack-allocated storage of a tiny number of elements with a fixed cap. All you need is Eq!

This crate is:

  • entirely safe
  • fully documented
  • no_std compatible
  • zero dependencies (unless you want thiserror or serde integration)

This crate is designed to be used in performance-sensitive contexts with a small number of elements, where iteration is more common than look-ups and you don't mind a fixed size. One particularly useful quirk is that elements are not recompacted upon removal: this can be very useful when replacing elements in a set or using the indexes that the elements are stored at in a semantic fashion. Iteration order is guaranteed to be stable, on a first-in-first-out basis.

If this isn't what you're after, check out one of these alternatives!

  • smolset: automatically converts to a HashSet when the number of elements is too large. Unordered.
  • array_map: Blazing fast, fixed size. All possible keys must be known statically.
  • sparseset: Heap-allocated, great for sparse data and frequent iteration. Stable order!
  • HashSet: Heap-allocated, unordered, requires Hash, unbounded size.
  • BTreeSet: Heap-allocated, ordered, requires Ord, unbounded size.
  • IndexMap: Heap-allocated, requires Hash, unbounded size.

This crate has a reasonable collection of convenience methods for working with both sets and maps, aiming for rough equivalence with HashMap and HashSet. If you'd like more, please submit an issue or PR!