2个版本
0.1.2 | 2023年2月25日 |
---|---|
0.1.1 |
|
0.1.0 | 2023年2月23日 |
#2271 在 数据结构
37KB
716 行
transient_map
TransientMap
作为 std::collections::HashMap
的包装器,允许淘汰未使用的元素。除了标准的哈希表API之外,它还提供了以下额外功能
drain_unused
移除自上次淘汰调用以来未插入或访问的所有元素,并将元素作为迭代器返回。整个淘汰操作的时间复杂度为O(未使用元素)
。请注意,这比遍历整个映射所需的时间要快,遍历整个映射的时间复杂度为O(容量)
。drain_used
移除自上次淘汰调用以来已插入或访问的所有元素。整个淘汰操作的时间复杂度为O(使用元素)
。set_all_used
在O(1)
时间内将所有元素标记为已访问。set_all_unused
在O(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());