5 个版本
0.2.3 | 2024 年 5 月 14 日 |
---|---|
0.2.2 | 2024 年 5 月 8 日 |
0.2.1 | 2023 年 1 月 18 日 |
0.1.1 | 2022 年 12 月 20 日 |
在 缓存 类别中排名第 18
每月下载量 219,160
在 486 个 crates 中使用 (直接使用 24 个)
98KB
2K SLoC
一个快速灵活的 LRU 映射
此仓库包含一个快速灵活的 LRU 映射。
- 速度极快。比
lru
crate 快两倍,且内存开销更小。 - 也可以用作有序映射,性能与
indexmap
相当,但增加了对 O(1) 删除的支持,而不会改变元素顺序(在indexmap
中仅支持 O(n) 非破坏性删除)。 - 可定制。开箱即用可以由长度或内存使用量限制,但支持自定义限制器,可以将其设置为按任何您想要的限制映射。
- 经过测试,miri 清洁,clippy 清洁和模糊测试。
- 支持
no_std
。
示例
use schnellru::{LruMap, ByLength};
let mut map = LruMap::new(ByLength::new(3));
// Insert three elements.
map.insert(1, "one");
map.insert(2, "two");
map.insert(3, "three");
assert_eq!(map.len(), 3);
// They're ordered according to which one was inserted last.
let mut iter = map.iter();
assert_eq!(iter.next().unwrap(), (&3, &"three"));
assert_eq!(iter.next().unwrap(), (&2, &"two"));
assert_eq!(iter.next().unwrap(), (&1, &"one"));
// Access the least recently inserted one.
assert_eq!(*map.get(&1).unwrap(), "one");
// Now the order's changed.
// The element we've accessed was moved to the front.
let mut iter = map.iter();
assert_eq!(iter.next().unwrap(), (&1, &"one"));
assert_eq!(iter.next().unwrap(), (&3, &"three"));
assert_eq!(iter.next().unwrap(), (&2, &"two"));
// Insert a fourth element.
// This will automatically pop the least recently accessed one.
map.insert(4, "four");
// Still the same number of elements.
assert_eq!(map.len(), 3);
// And this is the one which was removed.
assert!(map.peek(&2).is_none());
// And here's the new order.
let mut iter = map.iter();
assert_eq!(iter.next().unwrap(), (&4, &"four"));
assert_eq!(iter.next().unwrap(), (&1, &"one"));
assert_eq!(iter.next().unwrap(), (&3, &"three"));
许可协议
根据您的选择,许可协议为
- Apache 许可证第 2 版 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则您提交的任何有意包含在作品中的贡献,根据 Apache-2.0 许可证定义,将双重许可如上所述,无需任何附加条款或条件。
依赖关系
~2MB
~25K SLoC