2个版本
0.1.1 | 2024年5月7日 |
---|---|
0.1.0 | 2024年5月2日 |
在 数据结构 中排名第 577
每月下载量 89
在 2 个crate中使用 (通过 edges)
17KB
296 行
MashMap
支持每个键多个条目的扁平HashMap。
这是对Rust标准 HashMap
(使用hashbrown's RawTable
) 的改编,以支持具有相同键的多个条目。虽然常见的做法是使用 HashMap<K, Vec<V>>
来存储与键对应的条目,但 MashMap
保持扁平布局,并使用探测来选择槽位,在同一个表中存储所有条目。这种方法避免了由向量指针引起的内存间接引用,并且由于避免了为每个键存储指针 + 长度 + 容量,因此减少了内存开销。
示例用法
use mashmap::MashMap;
let mut map = MashMap::<usize, usize>::new();
map.insert(1, 10);
map.insert(1, 11);
map.insert(1, 12);
map.insert(2, 20);
map.insert(2, 21);
// iterate over the values with key `1` with mutable references and increment them
for val in map.get_mut_iter(&1) {
*val += 1;
}
// collect the values with keys `1` and `2`
// note that the order may differ from the insertion order
let mut values_1: Vec<_> = map.get_iter(&1).copied().collect();
let mut values_2: Vec<_> = map.get_iter(&2).copied().collect();
values_1.sort_unstable();
values_2.sort_unstable();
assert_eq!(values_1, vec![11, 12, 13]);
assert_eq!(values_2, vec![20, 21]);
致谢
这个crate受到了flat-multimap crate的启发,该crate不再有公共仓库。
依赖关系
~2MB
~25K SLoC