6个版本
使用旧版Rust 2015
0.1.5 | 2019年11月29日 |
---|---|
0.1.4 | 2019年11月20日 |
0.1.1 | 2016年8月18日 |
#512 in 数据结构
2,074 每月下载量
用于 9 个crate(3 个直接使用)
39KB
960 行
bitvector,Rust语言中的一个简单的位向量实现
这个crate是对librustc_data_structures/bitvec.rs的修改,以支持集合运算符。
文档
访问在线文档或运行
cargodoc
以生成本地副本。
如何使用
将以下行添加到您的Cargo.toml
文件中的[dependencies]
bitvector = 0.1
然后您可以使用BitVector
extern crate bitvector;
use bitvector::*;
fn main() {
let mut test_vec = BitVector::new(50);
for i in vec![0,1,3,5,7,11,13,17,19,23] { test_vec.insert(i); }
let mut test_vec2 = BitVector::new(50);
for i in vec![3,5,9,13,19,40,45] { test_vec2.insert(i); }
// union of test_vec and test_vec2
// other possible operators: intersection, difference
let union = test_vec.union(&test_vec2);
assert!(union.contains(3));
assert!(union.contains(5));
assert!(union.contains(13));
assert!(union.contains(19));
assert!(union.contains(9));
assert!(union.contains(40));
// all the operators also have `*_inplace` variants
// which directly modify `self` to avoid extra memory operations.
test_vec.union_inplace(&test_vec2);
assert!(test_vec.contains(3));
assert!(test_vec.contains(5));
assert!(test_vec.contains(13));
assert!(test_vec.contains(19));
assert!(test_vec.contains(0));
assert!(test_vec.contains(9));
assert!(test_vec.contains(40));
}
与std/collections/Set的性能比较
test bench::bench_bitset_operator ... bench: 222 ns/iter (+/- 22)
test bench::bench_bitset_operator_inplace ... bench: 122 ns/iter (+/- 5)
test bench::bench_btreeset_operator ... bench: 1,675 ns/iter (+/- 115)
test bench::bench_hashset_operator ... bench: 1,748 ns/iter (+/- 37)
许可
MIT