https://github.com/ivanpinezhaninov/intervaltree
A red-black self-balancing interval tree
https://github.com/ivanpinezhaninov/intervaltree
balanced-tree balanced-trees cplusplus cplusplus-11 cpp cpp11 header-only interval interval-tree intervals intervaltree red-black-tree red-black-trees redblacktree redblacktrees segment segment-tree segments segmenttree self-balancing-trees
Last synced: 5 months ago
JSON representation
A red-black self-balancing interval tree
- Host: GitHub
- URL: https://github.com/ivanpinezhaninov/intervaltree
- Owner: IvanPinezhaninov
- License: mit
- Created: 2017-09-19T09:16:38.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2020-08-06T06:41:17.000Z (over 5 years ago)
- Last Synced: 2025-04-10T01:08:11.428Z (9 months ago)
- Topics: balanced-tree, balanced-trees, cplusplus, cplusplus-11, cpp, cpp11, header-only, interval, interval-tree, intervals, intervaltree, red-black-tree, red-black-trees, redblacktree, redblacktrees, segment, segment-tree, segments, segmenttree, self-balancing-trees
- Language: C++
- Homepage:
- Size: 85.9 KB
- Stars: 29
- Watchers: 5
- Forks: 7
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# IntervalTree
[](https://travis-ci.org/IvanPinezhaninov/IntervalTree)
[](https://ci.appveyor.com/project/IvanPinezhaninov/intervaltree)
[](http://opensource.org/licenses/MIT)
## Overview
A red-black self-balancing interval tree C++11 header-only implementation
## Usage
```c++
#include
#include "intervaltree.hpp"
using namespace Intervals;
int main()
{
// Create an interval tree
IntervalTree tree;
// Insert intervals to the tree
tree.insert({20, 30});
tree.insert({40, 60});
tree.insert({70, 90});
tree.insert({60, 70});
tree.insert({40, 90});
tree.insert({80, 90});
// Wanted interval and point
Interval wantedInterval(50, 80);
auto wantedPoint = 50;
// Find intervals
const auto &overlappingIntervals = tree.findOverlappingIntervals(wantedInterval);
const auto &innerIntervals = tree.findInnerIntervals(wantedInterval);
const auto &outerIntervals = tree.findOuterIntervals(wantedInterval);
const auto &intervalsContainPoint = tree.findIntervalsContainPoint(wantedPoint);
// Print all intervals
std::cout << "All intervals:" << std::endl;
for (const auto &interval : tree.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 the point
std::cout << "Intervals contain the point with the value "
<< wantedPoint << ":" << std::endl;
for (const auto &interval : intervalsContainPoint) {
std::cout << interval << std::endl;
}
return 0;
}
```
## Build and test
```bash
git clone https://github.com/IvanPinezhaninov/IntervalTree.git
cd IntervalTree
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=YES
make -j4
cd ./test
./Test --rng-seed time
```
## License
This code is distributed under the [MIT License](LICENSE)
## Author
[Ivan Pinezhaninov](mailto:ivan.pinezhaninov@gmail.com)