有人知道C ++中的任何好interval tree
实现吗?
显然,模板驱动的东西,在boost
中更好 - 就像风格一样。
另一个问题 - 如果有人测试过,基于std::vector
的基于{{1}}的区间树实现排序可以在实践中击败通用间隔树(带O(lg)操作)吗?
答案 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)
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自平衡树。