#set #map

petitset

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)

MIT/Apache

53KB
792 lines

About

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!

Dependencies

~165KB