#slotmap #key-value #map #slot #lookup #key-storage #structure

one_way_slot_map

具有最小键和值限制的单向槽位映射实现

10个版本

0.4.2 2021年12月12日
0.4.1 2021年10月7日
0.3.1 2020年7月27日
0.2.2 2020年7月23日
0.1.3 2020年6月11日

数据结构中排名1254

每月下载37
ev_slotmap中使用

MIT/Apache

53KB
908

单向槽位映射

这是类似于SlotMap的槽位映射实现,具有更少的限制,并能够将数据嵌入到键对象中。这个crate的“单向”名称来源于一个实现细节,即防止插入的值再次被取出,除非它们被另一个实例替换。可以引用并写入已插入的值,但即使在值“移除”后,值的所有权仍属于映射。

该数据结构使用固定大小的块(类似于SlotMap的DenseSlotMap),因此查找需要两次间接步骤。

使用示例

首先创建一个包含嵌入数据类型的键类

/// Define a simple key with an embedded usize
define_key_type!(DemoKey<usize>);

/// Or define a less-simple key with some derived traits
define_key_type!(TestKeyWithDerives<usize> : Copy + Clone + Debug);

然后创建一个槽位映射并使用键进行crud操作

let mut slot_map = SlotMap::new();

let key: DemoKey = slot_map.insert(0, "Demo!");
assert_eq!(Some(&"Demo!"), slot_map.get(&key));

let slot = slot_map.get_mut(&key).unwrap();
*slot = "Updated!";

assert_eq!(Some(&mut "Updated!"), slot_map.remove(&key));
assert_eq!(None, slot_map.get(&key));

性能

即将提供基准测试,但总的来说,这个槽位映射的运行速度大约是默认的SlotMap实现的一半,略快于SlotMap的DenseSlotMap,比std::collections::HashMap快大约十倍。

无运行时依赖