#registry #insertion #indices #values #indexing #removal #unordered

data_registry

一种具有即时插入、删除和访问的无序数据结构

1个稳定版本

1.0.0 2023年11月26日

#1497数据结构

MIT 许可证

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);

注册表还支持索引(通过 IndexIndexMut 特性)

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) 插入。

示例

你可以使用 RegistryRegistry::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);

注册表还支持索引(通过 IndexIndexMut 特性)

let mut r = Registry::new();
let i1 = r.insert(1);
let i2 = r.insert(4);

let one = r[i1];
r[i2] = r[i2] + 5;

无运行时依赖