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数据结构

Download history 204/week @ 2024-03-13 191/week @ 2024-03-20 168/week @ 2024-03-27 164/week @ 2024-04-03 206/week @ 2024-04-10 50/week @ 2024-04-17 87/week @ 2024-04-24 84/week @ 2024-05-01 103/week @ 2024-05-08 213/week @ 2024-05-15 161/week @ 2024-05-22 200/week @ 2024-05-29 272/week @ 2024-06-05 174/week @ 2024-06-12 69/week @ 2024-06-19 242/week @ 2024-06-26

每月 800 次下载
用于 s2gpp

Apache-2.0

26KB
384

sortedvec

Build Status Docs Crates.io

文档

一个纯 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());

基准测试

下表显示了在标准库的 HashMapSortedVecVec 中,字符串和整数键的查找如何扩展。

键类型 大小 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:第一个公共版本。

无运行时依赖