11 个不稳定版本 (5 个破坏性更新)
0.7.2 | 2023年10月5日 |
---|---|
0.7.0 |
|
0.6.0 | 2023年7月2日 |
0.5.0 | 2022年11月7日 |
0.2.5 | 2022年3月30日 |
#132 in 数据结构
每月2,131次下载
用于 71 个crate(直接使用4个)
110KB
3K SLoC
B-树范围映射
范围映射是一种将键聚合到键的范围中以便于存储的映射。每次需要在映射或集中存储大量数字键的项时,都应该使用范围映射(或范围集)。
这个库基于 btree-slab
的 B-树提供了一个范围映射实现。它定义了三种基本类型 RangeSet<T>
、RangeMap<K, V>
和 RangeMultiMap<K, S>
。
使用方法
RangeSet<T>
和 RangeMap<K, V>
的行为与标准的 BTreeSet<T>
和 BTreeMap<K, V>
类型类似。然而,除了 PartialOrd
,键类型还必须实现定义如何将键合并到范围的 Measure
特性。这个特性默认为 char
、整数类型和浮点类型实现。
use btree_range_map::RangeMap;
let mut range_map: RangeMap<i32, bool> = RangeMap::new();
range_map.insert(00..=05, true);
range_map.insert(4, false);
assert_eq!(range_map.range_count(), 3);
assert_eq!(range_map.get(03), Some(&true));
assert_eq!(range_map.get(04), Some(&false));
assert_eq!(range_map.get(05), Some(&true));
此库支持包含和排除边界
range_map.insert(..1, true);
range_map.insert(..=1, true);
range_map.insert(2, true);
range_map.insert(3..5, true);
range_map.insert(5..=7, true);
range_map.insert(7.., true);
assert_eq!(range_map.range_count(), 1);
它还支持具有排除起始边界的非标准范围
use btree_range_map::{
RangeFromExcluded,
RangeFromExcludedTo,
RangeFromExcludedToIncluded
};
// same as `4..`
range_map.insert(RangeFromExcluded::new(3), true);
// same as `3`
range_map.insert(RangeFromExcludedTo::new(2, 4), true);
// same as `1..=2`
range_map.insert(RangeFromExcludedToIncluded::new(0, 2), true);
assert_eq!(range_map.range_count(), 1);
浮点数
浮点数 f32
和 f64
被处理得与预期一样。
use btree_range_map::{RangeMap, RangeFromExcluded};
let mut range_map: RangeMap<f32, bool> = RangeMap::new();
// sets all `f32` below zero to `false`.
range_map.insert(..0.0, false);
// sets all `f32` above zero to `true`.
range_map.insert(RangeFromExcluded::new(0.0), true);
assert_eq!(range_map.range_count(), 2);
assert_eq!(range_map.get(0.0), None); // only `0.0` is unmapped.
许可证
在以下任一许可证下授权
- Apache License,版本 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由你选择。
贡献
除非你明确声明,否则根据Apache-2.0许可证定义的,任何有意提交以包含在作品中的贡献,将按照上述方式双许可,不附加任何额外条款或条件。
依赖项
~360–600KB
~14K SLoC