我正在尝试找到一个有效的C ++间隔树实现(很可能基于红黑树)而没有病毒或限制性许可。任何指向干净的轻量级独立实现的指针?对于我想到的用例,一开始就知道了一组区间(可能会有一百万个),我希望能够快速获得一个与给定区间重叠的区间列表。因此,一旦构建的树将不会改变 - 只需要快速查询。
答案 0 :(得分:4)
我在C ++ https://github.com/ekg/intervaltree编写了一个基于模板的区间树实现。 MIT许可证。享受。
答案 1 :(得分:3)
C ++标准库提供红/黑树std::map
,std::multimap
,std::set
和std::multiset
。
实际上,我想不出任何方法来处理这个问题比保留std::map
迭代器对并将这些迭代器对传递给upper_bound()
和lower_bound()
更有效。你希望迭代器对本身保存在一个映射中,这样你就可以很容易地将这些对可能在该区间中归零(如果“候选区间”中的开始迭代器出现在给定区间的结束之后)你正在看,然后你可以跳过检查 - 以及所有后来 - 迭代器对。)
答案 2 :(得分:1)
在this link还有一个Interval树的C#实现。为那些需要的人翻译成C ++很容易