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 在 数据结构 中
每月 下载 205 次
在 5 个 软件包中使用(4 个直接使用)
35KB
741 行
slabmap
此软件包提供了类型 SlabMap
。 SlabMap
是类似于 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);
SlabMap
与 HashMap
的区别
SlabMap
只能使用 usize 作为键。SlabMap
的键是自动确定的。SlabMap
的运行速度比HashMap
快。
SlabMap
与 Slab
的区别
Carl Lerche 的 slab
软件包提供了一个具有类似 API 的 slab 实现。
对于 Slab
和 SlabMap
,在集合中添加许多元素后,删除许多元素将降低迭代性能。
但是,与 Slab
不同,SlabMap
可以通过调用 SlabMap::optimize()
来提高迭代性能。
性能
以下图表显示了 BTreeMap
、HashMap
、Slab
(版本 0.4.2)、《code>SlabMap(版本 0.1.0)和 Vec
之间的性能差异,
插入
移除随机元素
随机访问
顺序访问
在从 10,000 个元素的集合中删除元素后的顺序访问
- 横轴:剩余元素的数量
- 纵轴:平均时间(越低越好)
许可证
本项目采用 Apache-2.0/MIT 双许可协议。请参阅两个 LICENSE-* 文件以获取详细信息。
贡献
除非您明确声明,否则根据Apache-2.0许可协议定义,您有意提交以包含在作品中的任何贡献都应按上述方式双重许可,不得附加任何额外条款或条件。
依赖项
~305–770KB
~18K SLoC