#slotmap #arena-allocator #reference #arena #allocator #storage

无需 std slotmap-fork-otter

Slotmap 数据结构 - Otter 的临时分支

1 个稳定版本

1.0.2 2021年4月18日

1171数据结构

Download history 14/week @ 2024-03-11 13/week @ 2024-03-18 30/week @ 2024-03-25 50/week @ 2024-04-01 10/week @ 2024-04-08 19/week @ 2024-04-15 22/week @ 2024-04-22 10/week @ 2024-04-29 18/week @ 2024-05-06 21/week @ 2024-05-13 9/week @ 2024-05-20 19/week @ 2024-05-27 10/week @ 2024-06-03 17/week @ 2024-06-10 10/week @ 2024-06-17 19/week @ 2024-06-24

57 每月下载量
7 个包中使用(通过 otter-support

Zlib 许可证

265KB
4K SLoC

这是一个分支

原始版本在此:https://github.com/orlp/slotmap

此分支仅因为 https://github.com/orlp/slotmap/issues/55https://github.com/orlp/slotmap/pull/56 仍在上游未审查而存在。

此分支的 git 源在此:https://github.com/ijackson/slotmap/tree/slotmap-fork-otter

slotmap

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

对于 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 兼容。

依赖关系

~175KB