21 releases

0.4.3 Dec 8, 2021
0.4.2 Nov 27, 2021
0.3.6 Oct 2, 2021
0.3.5 Feb 23, 2021
0.1.1 Nov 6, 2019

#759 in Data structures

Download history 1945/week @ 2024-07-27 1395/week @ 2024-08-03 1462/week @ 2024-08-10 2978/week @ 2024-08-17 1441/week @ 2024-08-24 1441/week @ 2024-08-31 853/week @ 2024-09-07 2833/week @ 2024-09-14 1989/week @ 2024-09-21 1022/week @ 2024-09-28 1409/week @ 2024-10-05 1773/week @ 2024-10-12 1125/week @ 2024-10-19 1796/week @ 2024-10-26 2492/week @ 2024-11-02 2568/week @ 2024-11-09

8,177 downloads per month
Used in 12 crates (8 directly)

MIT/Apache

220KB
5.5K SLoC

Vec-collections   Build Status Latest Version Docs Badge

About

This crate provides collections (sets and maps) that wrap SmallVec.

Use cases

Small collections

It happens very frequently that you have collections that have on average just a very small number of elements. If you know the maximum size or even the maximum typical size in advance, you can use this crate to store such collections without allocations. For a larger number of elements, the underlying SmallVec will allocate the elements on the heap as a single allocation.

Read-heavy collections

Another very frequent pattern is that you have a possibly large collection that is being created once and then used readonly for a long time. E.g. lookup tables. In these cases, ease of adding individual new elements is less important than compact in-memory representation and lookup performance. This crate provides succinct collections that have only a very small constant overhead over the contents of the collections.

Performance

Performance for bulk creation as well as lookup is better than BTreeMap/BTreeSet and comparable with HashMap/HashSet for types with a cheap Ord instance, like primitive types, and small to medium sizes. Performance for insertion or removal of individual elements to/from large collections is bad, however. This is not the intended use case.

Collections overview

VecSet

Provides a set backed by a SmallVec of elements.

VecMap

Provides a map backed by a SmallVec of key value pairs.

TotalVecSet

A VecSet with an additional flag so it can support negation. This way it is possible to represent e.g. the set of all u64 except 1.

TotalVecMap

A VecMap with an additional default value, so lookup is a total function.

[RadixTree]

A generic radix tree, coming in different flavours

Unsafe

The in place operations use unsafe code. If that is a problem for you, let me know and I can hide them behind a feature.

Dependencies

~0.3–1.3MB
~25K SLoC