3个不稳定版本

使用旧的Rust 2015

0.7.1 2017年5月30日
0.7.0 2016年4月30日
0.6.2 2016年4月27日

#1911 in 数据结构

Download history 109/week @ 2024-03-03 122/week @ 2024-03-10 147/week @ 2024-03-17 156/week @ 2024-03-24 193/week @ 2024-03-31 94/week @ 2024-04-07 149/week @ 2024-04-14 142/week @ 2024-04-21 130/week @ 2024-04-28 116/week @ 2024-05-05 132/week @ 2024-05-12 122/week @ 2024-05-19 122/week @ 2024-05-26 129/week @ 2024-06-02 38/week @ 2024-06-09 96/week @ 2024-06-16

396 每月下载次数
用于 7 个crate(3 个直接使用)

自定义许可证

27KB
510

IntervalTree

一个简单的crate,实现了区间树数据结构。一个 IntervalTreeu64 的范围映射到任何值。然后我们可以使用树来执行查询,如“哪些键/值对与范围(x,y)相交?”以及“树是否包含范围(X,Y)?”。插入、删除和查找的时间复杂度为O(log(n))。迭代查询的所有m个解的时间复杂度为O(m*log(n))。

extern crate theban_interval_tree;
extern crate rand;
extern crate time;
extern crate memrange;

use memrange::Range;

fn main(){
    let data = 4221;
    let mut t = theban_interval_tree::IntervalTree::<i32>::new();

    assert!(t.empty());
    assert!{t.min().is_none()};

    t.insert(Range::new(1,1), data);
    t.insert(Range::new(2,2), data+1);
    t.insert(Range::new(3,3), data+2);

    assert_eq!{t.min().expect("get min"),(&Range::new(1,1),&data)};

    assert!(!t.empty());
    assert!(t.get_or(Range::new(1,1), &0) == &data);
    assert!(!t.contains(Range::new(0,0)));

    t.delete(Range::new(1,1));

    assert!(!t.contains(Range::new(1,1)));

    for (i,pair) in t.iter().enumerate() {
        //[...]
    }

    for (i,pair) in t.range(34, 36).enumerate() {
        //[...]
    }
}

依赖项

~1.2–1.5MB
~25K SLoC