#slab #vec #map #allocator #key-value

slabmap

类似于 HashMap 的集合,自动确定键

4 个版本

0.2.1 2024年5月23日
0.2.0 2023年8月19日
0.1.1 2020年7月1日
0.1.0 2020年7月1日

#225数据结构

Download history 42/week @ 2024-04-29 46/week @ 2024-05-06 41/week @ 2024-05-13 217/week @ 2024-05-20 103/week @ 2024-05-27 65/week @ 2024-06-03 65/week @ 2024-06-10 59/week @ 2024-06-17 50/week @ 2024-06-24 33/week @ 2024-07-01 65/week @ 2024-07-08 64/week @ 2024-07-15 61/week @ 2024-07-22 47/week @ 2024-07-29 43/week @ 2024-08-05 40/week @ 2024-08-12

每月 下载 205
5 软件包中使用(4 个直接使用)

MIT/Apache

35KB
741

slabmap

Crates.io Docs.rs Actions Status

此软件包提供了类型 SlabMapSlabMap 是类似于 HashMap 的集合,可以自动确定键。

安装

将其添加到您的 Cargo.toml 中

[dependencies]
slabmap = "0.2.0"

示例

use slabmap::SlabMap;

let mut s = SlabMap::new();
let key_a = s.insert("aaa");
let key_b = s.insert("bbb");

assert_eq!(s[key_a], "aaa");
assert_eq!(s[key_b], "bbb");

for (key, value) in &s {
    println!("{} -> {}", key, value);
}

assert_eq!(s.remove(key_a), Some("aaa"));
assert_eq!(s.remove(key_a), None);

SlabMapHashMap 的区别

  • SlabMap 只能使用 usize 作为键。
  • SlabMap 的键是自动确定的。
  • SlabMap 的运行速度比 HashMap 快。

SlabMapSlab 的区别

Carl Lerche 的 slab 软件包提供了一个具有类似 API 的 slab 实现。

对于 SlabSlabMap,在集合中添加许多元素后,删除许多元素将降低迭代性能。

但是,与 Slab 不同,SlabMap 可以通过调用 SlabMap::optimize() 来提高迭代性能。

性能

以下图表显示了 BTreeMapHashMapSlab(版本 0.4.2)、《code>SlabMap(版本 0.1.0)和 Vec 之间的性能差异,

插入

insert performance

移除随机元素

remove random elements performance

随机访问

random access performance

顺序访问

sequential access performance

在从 10,000 个元素的集合中删除元素后的顺序访问

  • 横轴:剩余元素的数量
  • 纵轴:平均时间(越低越好)

Sequential access after remove many elements performance

许可证

本项目采用 Apache-2.0/MIT 双许可协议。请参阅两个 LICENSE-* 文件以获取详细信息。

贡献

除非您明确声明,否则根据Apache-2.0许可协议定义,您有意提交以包含在作品中的任何贡献都应按上述方式双重许可,不得附加任何额外条款或条件。

依赖项

~305–770KB
~18K SLoC