9 个版本 (稳定)
1.0.5 | 2023年11月6日 |
---|---|
1.0.4 | 2023年10月31日 |
1.0.2 | 2023年5月8日 |
1.0.0 | 2022年3月22日 |
0.1.1 | 2022年1月4日 |
#406 in 数据结构
每月45次下载
11KB
248 行
Hotel
将数据与唯一键关联的简单集合数据结构。
属性和优势
键的类型为 usize
,因此可以以较低的成本传递,而不是实际数据。
优势在于 keys
可以以非常低廉的成本克隆,并且永远不需要对键进行哈希处理。这也意味着永远不会发生冲突。
put
、remove
、get
和 take
都是 O(1) 操作。
Hotel
由 Vec
支持,并且非常 内存高效。正因为如此,它通过继承 Vec
的缓存友好性,在现代 CPU 上非常高效。
用例
以下是示例
- 通常与 Maps 一起使用,以避免经常哈希和克隆键。
- 在某些情况下可以用作高性能的
HashMap
替代品。 - 实现图!图可以有很多形式,以某种方式几乎可以在每个程序中找到。树很简单,其他所有内容在 Rust 中实现起来都不太明显,这要归功于它的所有权规则。一个
Hotel
是存储节点所有权和管理边作为键的完美地方。
示例
这是一个简单的图。A -> B -> C
let mut nodes: Hotel<Node>,
let mut edges: Vec<(usize, usize)>
let key1 = nodes.put(Node::new(a));
let key2 = nodes.put(Node::new(b));
let key3 = nodes.put(Node::new(c));
edges.push( (key1, key2) );
edges.push( (key2, key3) );
HotelMap
此外,这个包还包含 HotelMap 数据结构。它是将键映射到简单 usize 值的简写,并且能够用这两种方式索引。这可以具有使用可复制的和小的 usize
的优势,而不是始终携带复杂和大的键。