8 个版本 (4 个重大更改)
0.5.0 | 2020 年 9 月 25 日 |
---|---|
0.4.1 | 2019 年 1 月 23 日 |
0.3.2 | 2019 年 1 月 22 日 |
0.2.0 | 2019 年 1 月 19 日 |
0.1.0 | 2019 年 1 月 17 日 |
#708 在 数据结构
每月 800 次下载
用于 s2gpp
26KB
384 行
sortedvec
一个纯 Rust 库,它公开宏,用于在 Ord
键上生成数据结构,比常规的 Vec
更快地查找 (O(log(n))
与 O(n)
),并且比哈希表更简单、更节省内存。它非常适合小型查找表,其中插入和删除操作很少。
注意: sortedvec
仍然是实验性的,其接口可能会更改。
示例
use sortedvec::sortedvec;
sortedvec! {
struct SortedVec {
fn derive_key(x: &u32) -> u32 { *x }
}
}
let unsorted = vec![3, 5, 0, 10, 7, 1];
let sorted = SortedVec::from(unsorted.clone());
// linear search (slow!)
let unsorted_contains_six: Option<_> = unsorted.iter().find(|&x| *x == 6);
assert!(unsorted_contains_six.is_none());
// binary search (fast!)
let sorted_contains_six: Option<_> = sorted.find(&6);
assert!(sorted_contains_six.is_none());
基准测试
下表显示了在标准库的 HashMap
、SortedVec
和 Vec
中,字符串和整数键的查找如何扩展。
键类型 | 大小 | HashMap |
SortedVec |
Vec |
---|---|---|---|---|
int | 2 | 17 | 2 | 2 |
int | 6 | 17 | 3 | 2 |
int | 10 | 18 | 4 | 3 |
int | 50 | 19 | 5 | 15 |
int | 100 | 23 | 6 | 28 |
int | 500 | 18 | 8 | 127 |
int | 1000 | 17 | 8 | 231 |
string | 2 | 25 | 10 | 5 |
string | 6 | 25 | 20 | 12 |
string | 10 | 27 | 25 | 21 |
string | 50 | 30 | 36 | 113 |
string | 100 | 27 | 42 | 232 |
string | 500 | 26 | 53 | 1,207 |
string | 1000 | 26 | 59 | 2,324 |
变更日志
- 0.5.0:
sortedvec_slicekey!
宏的引入。position
方法的引入。- 通过将它们与数据结构相关联,解决了键派生函数命名冲突。这将键派生名称固定为
derive_key
。这是一个 重大更改。
- 0.4.1:第一个公共版本。