1个稳定版本
1.0.0 | 2023年11月26日 |
---|
#1497 在 数据结构
24KB
428 行
此库导出了一种无序、可增长的具有堆分配内容的映射类型,表示为 Registry<T>
。所有包含的值在插入时都会分配一个唯一的索引。当项目被删除时,索引将被释放。
注册表具有 O(1) 索引、O(1) 删除和 O(1) 插入。
示例
你可以使用 Registry::new
显式创建一个 Registry
let r: Registry<i32> = Registry::new();
你可以将值 insert
到注册表中
let mut r = Registry::new();
let index = r.insert(3);
删除值的方式大致相同
let mut r = Registry::new();
let index = r.insert(3);
let three = r.remove(index);
注册表还支持索引(通过 Index
和 IndexMut
特性)
let mut r = Registry::new();
let i1 = r.insert(1);
let i2 = r.insert(4);
let one = r[i1];
r[i2] = r[i2] + 5;
Registry
类型还公开了完整的迭代器API,因此它可以像任何其他Rust容器一样使用。
lib.rs
:
一种具有堆分配内容的无序、可增长映射类型,表示为 Registry<T>
。所有包含的值在插入时都会分配一个唯一的索引。当项目被删除时,索引将被释放。
注册表具有 O(1) 索引、O(1) 删除和 O(1) 插入。
示例
你可以使用 Registry
和 Registry::new
显式创建一个 Registry
let r: Registry<i32> = Registry::new();
你可以将值 insert
到注册表中
let mut r = Registry::new();
let index = r.insert(3);
删除值的方式大致相同
let mut r = Registry::new();
let index = r.insert(3);
let three = r.remove(index);
注册表还支持索引(通过 Index
和 IndexMut
特性)
let mut r = Registry::new();
let i1 = r.insert(1);
let i2 = r.insert(4);
let one = r[i1];
r[i2] = r[i2] + 5;