#slotmap #slab #pi

nightly no-std pi_slotmap

槽映射数据结构

17 个版本

0.2.0 2023 年 8 月 16 日
0.1.17 2024 年 5 月 29 日
0.1.16 2024 年 2 月 28 日
0.1.15 2023 年 10 月 10 日
0.1.0 2022 年 3 月 4 日

#135数据结构

Download history 56/week @ 2024-05-03 51/week @ 2024-05-10 66/week @ 2024-05-17 230/week @ 2024-05-24 73/week @ 2024-05-31 47/week @ 2024-06-07 70/week @ 2024-06-14 71/week @ 2024-06-21 39/week @ 2024-06-28 140/week @ 2024-07-05 73/week @ 2024-07-12 61/week @ 2024-07-19 38/week @ 2024-07-26 45/week @ 2024-08-02 57/week @ 2024-08-09 31/week @ 2024-08-16

183 每月下载量
21 个 crate 中使用 (14 直接)

MIT/Apache

320KB
5K SLoC

该库 slotmap 的一份拷贝,另外添加了一些新的功能

slotmap

A Rust 库提供三个容器,具有持久唯一键来访问存储的值,SlotMapHopSlotMapDenseSlotMap。插入时返回一个键,可用于稍后访问或删除值。插入、删除和访问都占用 O(1) 时间,开销低。非常适合存储需要稳定、安全引用但其他方面没有明确所有权的对象集合,如游戏实体或图节点。还提供了两个辅助映射,SecondaryMapSparseSecondaryMap,允许您将更多对象映射到槽映射创建的键。请参阅文档以获取更多信息。

使用 slotmap 所需的最小稳定 Rust 版本为 1.49。要开始使用 slotmap,请将以下内容添加到您的 Cargo.toml

[dependencies]
slotmap = "1.0"

示例

简短示例

use slotmap::{SlotMap, SecondaryMap};

let mut sm = SlotMap::new();
let foo = sm.insert("foo");  // Key generated on insert.
let bar = sm.insert("bar");
assert_eq!(sm[foo], "foo");
assert_eq!(sm[bar], "bar");

sm.remove(bar);
let reuse = sm.insert("reuse");  // Space from bar reused.
assert_eq!(sm.contains_key(bar), false);  // After deletion a key stays invalid.

let mut sec = SecondaryMap::new();
sec.insert(foo, "noun");  // We provide the key for secondary maps.
sec.insert(reuse, "verb");

for (key, val) in sm {
    println!("{} is a {}", val, sec[key]);
}

许可证

slotmap 在 Zlib 许可证下发布,这是一种宽松的许可证。它得到 OSI 和 FSF 的批准,与 GPL 兼容。

依赖项

~0.7–1.3MB
~27K SLoC