IntervalTree

MIT License

Overview

A red-black self-balancing interval tree C++11 implementation

Usage

#include <iostream>
#include "intervaltree.hpp"

int main()
{
    // Create an interval tree
    Intervals::IntervalTree<int> intervalTree;

    // Insert intervals to the tree
    intervalTree.insert({ 20, 30 });
    intervalTree.insert({ 40, 60 });
    intervalTree.insert({ 70, 90 });
    intervalTree.insert({ 60, 70 });
    intervalTree.insert({ 40, 90 });
    intervalTree.insert({ 80, 90 });

    // Wanted interval and point
    const auto wantedInterval = Intervals::Interval<int>(50, 80);
    const auto wantedPoint = 50;

    // Find intervals
    const auto &overlappingIntervals = intervalTree.findOverlappingIntervals(wantedInterval);
    const auto &innerIntervals = intervalTree.findInnerIntervals(wantedInterval);
    const auto &outerIntervals = intervalTree.findOuterIntervals(wantedInterval);
    const auto &intervalsContainPoint = intervalTree.findIntervalsContainPoint(wantedPoint);

    // Print all intervals
    std::cout << "All intervals:" << std::endl;
    for (const auto &interval : intervalTree.intervals()) {
        std::cout << interval << std::endl;
    }
    std::cout << std::endl;

    // Print overlapping intervals
    std::cout << "Overlapping intervals for " << wantedInterval << ":" << std::endl;
    for (const auto &interval : overlappingIntervals) {
        std::cout << interval << std::endl;
    }
    std::cout << std::endl;

    // Print inner intervals
    std::cout << "Inner intervals for " << wantedInterval << ":" << std::endl;
    for (const auto &interval : innerIntervals) {
        std::cout << interval << std::endl;
    }
    std::cout << std::endl;

    // Print outer intervals
    std::cout << "Outer intervals for " << wantedInterval << ":" << std::endl;
    for (const auto &interval : outerIntervals) {
        std::cout << interval << std::endl;
    }
    std::cout << std::endl;

    // Print intervals contain a point
    std::cout << "Intervals contain a point value of " << wantedPoint << ":" << std::endl;
    for (const auto &interval : intervalsContainPoint) {
        std::cout << interval << std::endl;
    }

    return 0;
}