3个版本
0.1.3 | 2023年9月27日 |
---|---|
0.1.2 | 2023年9月26日 |
0.1.1 | 2023年9月25日 |
2015 在 数据结构 中
41KB
620 行
densemap
此库提供了一种名为 DenseMap
的集合,该集合可以通过唯一键永久访问并且快速可迭代。在插入时生成一个键,可以用它来访问任何元素。插入、删除和获取都是在常数时间内运行的,迭代性能与 Vec
相同。此外,DenseMap
通过重用已删除区域来减少内存使用。
示例
use densemap::{DenseMap, Key};
// Creates a new dense map and inserts some elements.
let mut densemap = DenseMap::new();
let key_of_alice = densemap.insert("alice");
let key_of_bob = densemap.insert("bob");
// Gets an element.
assert_eq!(densemap.get(key_of_alice), Some(&"alice"));
// Removes an element.
assert_eq!(densemap.remove(key_of_alice), Some("alice"));
let key_of_charlie = densemap.insert("charlie");
// Keys are unique and permanently accessible.
assert_eq!(densemap.get(key_of_alice), None);
// Iterates all elements.
for value in densemap.values() {
println!("{value}");
}
与其他库的差异
此库类似于 slotmap::DenseSlotMap
,但它有一些差异。DenseMap
由于降低了开销,具有性能优势。此外,此库仅提供 DenseMap
集合。
基准测试
对 std-1.72.1
、slab-0.4.9
、slotmap-1.0.6
和 densemap-0.1.0
的插入、删除、重新插入和迭代的性能测量结果如下表所示。这些结果是在WSL上使用 criterion
测量的。
集合 | 插入 | 删除 | 重新插入 | 迭代 |
---|---|---|---|---|
std::vec::Vec | 16.367 | 7.0338μs | 10.438μs | 3.6754μs |
std::collections::HashMap | 351.25μs | 187.99μs | 174.97μs | 14.617μs |
slab::Slab | 17.728μs | 17.952μs | 26.207μs | 4.9409μs |
slotmap::SlotMap | 49.043μs | 29.594μs | 48.153μs | 22.566μs |
slotmap::HopSlotMap | 46.897μs | 126.29μs | 67.884μs | 24.349μs |
slotmap::DenseSlotMap | 63.195μs | 62.308μs | 67.072μs | 5.2833μs |
密集图::密集图 | 40.357μs | 24.969μs | 47.280μs | 3.6269μs |
许可证
此库采用MIT许可证授权。
依赖项
~175KB