1 个不稳定版本
0.1.0 | 2019年1月12日 |
---|
#2334 在 数据结构 中
62KB
1K SLoC
index-set
一个有序集合,在稀疏位字段中存储索引。
用法
将以下内容添加到 Cargo.toml
[dependencies]
index-set = "0.1"
许可证
此项目采用 MIT 许可证。
lib.rs
:
一个有序集合,在稀疏位字段中存储索引。
IndexSet
与普通集合类似,但只存储其元素的索引。实际上,IndexSet
存储元素是否属于集合,同时允许元素本身存储在其他地方;IndexSet
不对其元素拥有所有权,甚至不拥有它们的引用,并且元素可以同时出现在多个 IndexSet
中。
IndexSet
也可以作为在有序集合中高效存储整数的有效方式。
有关 IndexSet
的更多信息,请参阅文档。
示例
基本用法
use index_set::{IndexSet, ToIndex};
enum Topping {
Anchovies,
Cheese,
Ham,
Pineapple,
}
impl ToIndex for Topping {
type Index = u8;
fn to_index(&self) -> u8 {
match self {
Topping::Anchovies => 0,
Topping::Cheese => 1,
Topping::Ham => 2,
Topping::Pineapple => 3,
}
}
}
let mut pizza = IndexSet::<Topping>::new();
pizza.insert(&Topping::Cheese);
pizza.insert(&Topping::Ham);
pizza.insert(&Topping::Pineapple);
assert_eq!(pizza.contains(&Topping::Pineapple), true);
assert_eq!(pizza.contains(&Topping::Anchovies), false);
存储整数
use index_set::IndexSet;
let mut set = IndexSet::<u32>::new();
set.insert(&1000000);
set.insert(&1);
set.insert(&3);
set.insert(&2);
let vec: Vec<u32> = set.into_iter().collect();
assert_eq!(vec, [1, 2, 3, 1000000])
实现
内部,IndexSet
使用稀疏位字段来表示集合中索引的存在。位字段被分成256位的桶,并存储在 BTreeMap
中。