4个版本 (2个稳定版)

1.0.7 2023年11月30日
1.0.6 2021年8月30日
1.0.5 2021年7月3日
1.0.2 2021年1月9日
0.2.0 2018年7月17日

#15 in 数据结构

Download history 155053/week @ 2024-04-20 138693/week @ 2024-04-27 136231/week @ 2024-05-04 146459/week @ 2024-05-11 141291/week @ 2024-05-18 149713/week @ 2024-05-25 154923/week @ 2024-06-01 164087/week @ 2024-06-08 162148/week @ 2024-06-15 161744/week @ 2024-06-22 150802/week @ 2024-06-29 159839/week @ 2024-07-06 171404/week @ 2024-07-13 180349/week @ 2024-07-20 171272/week @ 2024-07-27 171022/week @ 2024-08-03

每月721,060次下载
用于 2,674 个crate (184个直接使用)

Zlib 许可证

285KB
4.5K SLoC

slotmap

一个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兼容。

依赖项