Usage
Add this to your Cargo.toml:
[]
= "0.1"
Description
An implementation of a set and a map using a pair of sparse and dense arrays as backing stores.
This type of set is useful when you need to efficiently track set membership for integers from a large universe, but the values are relatively spread apart.
The sparse set supports constant-time insertion, removal, lookups as expected. In addition:
- Compared to the standard library's
HashSet, clearing the set is constant-time instead of linear time. - Compared to bitmap-based sets like the
bit-setcrate, iteration over the set is proportional to the cardinality of the set (how many elements you have) instead of proportional to the maximum size of the set.
The main downside is that the set requires more memory than other set implementations.
The map behaves identically to the set with the exception that it tracks data alongside
the values that are stored in the set. Under the hood, SparseSet is a SparseMap of keys to ().
The implementation is based on the paper "An efficient representation for sparse sets" (1993) by Briggs and Torczon.
Examples
use SparseSet;
let mut s: = new;
s.insert;
s.insert;
s.insert;
s.remove;
if !s.contains
// Print 0, 1, 3 in some order
for x in s.iter
use ;
let mut m: = new;
m.insert;
m.insert;
assert_eq!;
assert_eq!;
for Pair in m.iter
License
Dual-licensed for compatibility with the Rust project.
Licensed under the Apache License Version 2.0: http://www.apache.org/licenses/LICENSE-2.0, or the MIT license: http://opensource.org/licenses/MIT, at your option.