У меня была точно такая же потребность. Я не смог найти подходящих (простых, современных, переносимых) реализаций, поэтому я использовал реализацию Python от Brent Pedersen в качестве руководства и написал базовые версии C ++ . IntervalTree ведет себя как стандартный контейнер STL, с некоторыми оговорками из-за своей простоты (например, без итераторов). Вы используете это так («Т» - произвольный тип):
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