# Sparse Map
[](https://github.com/voxell-tech/sparse_map#license)
[](https://crates.io/crates/sparse_map)
[](https://crates.io/crates/sparse_map)
[](https://docs.rs/sparse_map/latest/sparse_map/)
[](https://github.com/voxell-tech/sparse_map/actions)
[](https://discord.gg/Mhnyp6VYEQ)
A sparse map with stable generational keys. It is designed for
scenarios with frequent insertions and removals.
The crate is `no_std`-friendly and uses generational indices to
prevent use-after-free and slot reuse bugs.
## Example
```rust
use sparse_map::SparseMap;
let mut map = SparseMap::new();
let k1 = map.insert(42);
*value += 2;
k
})
.expect("Key should exist.");
assert_eq!(map.get(&k1), Some(&44));
assert_eq!(map.get(&k2), Some(&42));
map.remove(&k1);
assert_eq!(map.get(&k1), None);
```
## Join the community!
You can join us on the [Voxell discord server](https://discord.gg/Mhnyp6VYEQ).
## License
`sparse_map` is dual-licensed under either:
- MIT License ([LICENSE-MIT](LICENSE-MIT) or [http://opensource.org/licenses/MIT](http://opensource.org/licenses/MIT))
- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0))
This means you can select the license you prefer!
This dual-licensing approach is the de-facto standard in the Rust ecosystem and there are [very good reasons](https://github.com/bevyengine/bevy/issues/2373) to include both.