#key-value #slab #compact #linked-list #id #structure #key-index

compactmap

基于 Vec 的紧凑映射,它会自动为您的值分配 ID。与 Slab 非常相似。

11 个版本

使用旧的 Rust 2015

0.3.7 2018年1月10日
0.3.6 2018年1月1日
0.3.5 2017年12月30日
0.3.2 2017年11月12日
0.1.0 2015年12月20日

#8 in #key-index

49 每月下载量
用于 dnscache

MIT/Apache

53KB
1.5K SLoC

Compactmap - 使用 usize 作为键类型并维护内部链表以跟踪删除节点的基于 Vec 的映射。

插入新值时,您不需要选择键。您可以删除任何条目。

基于 这篇帖子eddyb

CompactMap 的功能和结构几乎与 Slab 相同,除了缺少缓存的长度和更多功能。如果我知道 Slab 的话,CompactMap 就不会出现了。

待办事项

  • 更彻底的测试
  • 条目(它真的需要吗?)

许可协议是 MIT 或 Apache,与 Rust 本身一样。


lib.rs:

一个类似映射的数据结构,在插入时为小整数键。删除条目的键被重用于新的插入。底层数据存储在向量中,键只是该向量的索引。主要技巧是维护空闲索引的内部链表以供重用。

Serde 支持。如果需要在序列化时预先计算长度(例如,对于 bincode),请使用 serde_ser_len 功能。

如果您担心由于这些 usize 而失去严格的类型优势,可以使用 特殊包装器

另请参阅: Slab

依赖项

~170KB