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中使用
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快大约十倍。