C ++ - 区间树实现

时间:2011-03-23 15:41:47

标签: c++ data-structures interval-tree

有人知道C ++中的任何好interval tree实现吗?

显然,模板驱动的东西,在boost中更好 - 就像风格一样。

另一个问题 - 如果有人测试过,基于std::vector的基于{{1}}的区间树实现排序可以在实践中击败通用间隔树(带O(lg)操作)吗?

5 个答案:

答案 0 :(得分:20)

我有完全相同的需求。我找不到任何合适的(简单,现代,可移植)实现,因此我使用a python implementation by Brent Pedersen作为指南并编写了一个准系统C++ version。 IntervalTree的行为类似于标准的STL容器,由于其简单性(例如没有迭代器)而有一些注意事项。你这样使用它(“T”是一种任意类型):

vector<Interval<T> > intervals;
// ... make intervals!
IntervalTree<T> tree(intervals);

你这样查询:

vector<Interval<T> > results;
tree.findContained(start, stop, results);
// results now contains Intervals which are fully contained in the query interval
results.clear();
tree.findOverlapping(start, stop, results);
// results now contains Intervals which overlap the query interval

答案 1 :(得分:13)

像Boost一样? Boost ICL

Boost Interval容器库

答案 2 :(得分:1)

to be one中显示NCBI C++ Toolkit

Jury仍然不知道它是否“好”,(甚至它是否是模板驱动的;我对C ++仍然有点新,所以我不完全确定它是,但我怀疑那么多)。

答案 3 :(得分:1)

我将Interval Tree的简单实现上传到github:https://github.com/coolsoftware/ITree

在itree.h中查看类itree。

答案 4 :(得分:0)

如果您不介意将c#实现转换为c ++,请转到http://code.google.com/p/intervaltree/。基于avl自平衡树。