Expand description
§Thin Collections for Rust
Alternative implementations for vector, map and set that are faster/smaller for some use cases.
ThinVec
is a general vector replacement that only uses a single usize
.
std::collections::Vec
uses 3. This makes ThinVec
a much better choice when it’s used
inside another data structure, such as a vector of vectors or a map of vectors, etc.
ThinMap
is a specialized map replacement for small key values. It uses less memory than HashMap
if mem::size_of::<(K, V)>() < 18
. It’s also 2x to 5x faster (see the benchmarks). It’s perfect
for all the primitives, or your own keys, but for custom keys, you must implement the ThinSentinel
trait.
ThinSet
uses ThinMap
underneath, so it’s great for elements up to 18 bytes.
V64
is a specialized vector replacement that uses a single 64bit value to represent itself.
It can store up to 7 bytes in that, and then uses heap memory. It’s ideal for small vectors,
especially if those vectors are used inside other data structures.
§Usage
Add this to your Cargo.toml
:
[dependencies]
thincollections = "0.5.0"
and this to your crate root:
#[macro_use] extern crate thincollections;
Modules§
- thin_
hasher - Implementations of
Hasher
that work well withThinMap
/ThinSet
- thin_
map ThinMap
: a fast map with lower memory usage for small key values.- thin_
sentinel - A special trait required for
ThinMap
andThinSet
- thin_
set ThinSet
: a fast, low memory set implementation for small elements.- thin_
v64 V64
a generalVec
replacement in a single 64 bit pointer.- thin_
vec ThinVec
a generalVec
replacement in a single usize-sized pointer.