2个版本

0.1.2 2023年2月25日
0.1.1 2023年2月25日
0.1.0 2023年2月23日

#2271数据结构

MIT/Apache

37KB
716

transient_map

Crates.io Docs.rs

TransientMap 作为 std::collections::HashMap 的包装器,允许淘汰未使用的元素。除了标准的哈希表API之外,它还提供了以下额外功能

  • drain_unused 移除自上次淘汰调用以来未插入或访问的所有元素,并将元素作为迭代器返回。整个淘汰操作的时间复杂度为 O(未使用元素)。请注意,这比遍历整个映射所需的时间要快,遍历整个映射的时间复杂度为 O(容量)
  • drain_used 移除自上次淘汰调用以来已插入或访问的所有元素。整个淘汰操作的时间复杂度为 O(使用元素)
  • set_all_usedO(1) 时间内将所有元素标记为已访问。
  • set_all_unusedO(1) 时间内将所有元素标记为未访问。

这些附加功能使得 TransientMap 成为缓存等应用的理想选择,在这些应用中,希望高效地丢弃未使用的数据。

以下是如何使用 TransientMap 的简要示例

let mut map = TransientMap::new();
map.insert_unused(1, "a");
map.insert_unused(2, "b");
assert_eq!(Some("b"), map.remove(&2));
map.insert(3, "c");
map.insert(4, "d");
assert_eq!(vec!((1, "a")), map.drain_unused().collect::<Vec<_>>());

let mut res = map.drain_unused().collect::<Vec<_>>();
res.sort_by(|a, b| a.0.cmp(&b.0));

assert_eq!(vec!((3, "c"), (4, "d")), res);
assert_eq!(0, map.len());

无运行时依赖项