#allocator #constant-time #storage #no-std

无std densemap

一种永久可由唯一键访问并快速可迭代的集合数据结构

3个版本

0.1.3 2023年9月27日
0.1.2 2023年9月26日
0.1.1 2023年9月25日

2015数据结构

MIT 许可证

41KB
620

densemap

Crates.io Crates.io

文档

此库提供了一种名为 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.1slab-0.4.9slotmap-1.0.6densemap-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