Skip to content

Disjoint Interval Set API Reference

Complete API documentation for the disjoint_interval_set<I> class template.

Class Template

template<typename I>
class disjoint_interval_set;

Template Parameters

  • I: The interval type. Typically interval<T>.

Common Type Aliases

namespace dis {
    using real_set = disjoint_interval_set<real_interval>;
    using integer_set = disjoint_interval_set<integer_interval>;
}

Constructors

Default Constructor

disjoint_interval_set() = default;

From Interval

explicit disjoint_interval_set(I interval);

From Initializer List

disjoint_interval_set(std::initializer_list<I> intervals);

From Range

template<std::ranges::input_range R>
explicit disjoint_interval_set(R&& range);

Named Constructors

empty()

[[nodiscard]] static disjoint_interval_set empty();

from_string(std::string_view str)

[[nodiscard]] static disjoint_interval_set from_string(std::string_view str);
Parses mathematical notation like "[0,5) ∪ (10,20]".

Core Operations

Queries

is_empty()

[[nodiscard]] bool is_empty() const noexcept;

size()

[[nodiscard]] size_type size() const noexcept;
Returns number of disjoint intervals.

contains(value_type value)

[[nodiscard]] bool contains(value_type value) const;
Tests membership. O(log n) via binary search.

overlaps(const disjoint_interval_set& other)

[[nodiscard]] bool overlaps(const disjoint_interval_set& other) const;

Set Operations

All operations return a new set (value semantics).

Union

disjoint_interval_set unite(const disjoint_interval_set& other) const;
friend disjoint_interval_set operator|(const disjoint_interval_set& a,
                                       const disjoint_interval_set& b);

Intersection

disjoint_interval_set intersect(const disjoint_interval_set& other) const;
friend disjoint_interval_set operator&(const disjoint_interval_set& a,
                                       const disjoint_interval_set& b);

Complement

disjoint_interval_set complement() const;
friend disjoint_interval_set operator~(const disjoint_interval_set& a);

Difference

disjoint_interval_set difference(const disjoint_interval_set& other) const;
friend disjoint_interval_set operator-(const disjoint_interval_set& a,
                                       const disjoint_interval_set& b);

Symmetric Difference

disjoint_interval_set symmetric_difference(const disjoint_interval_set& other) const;
friend disjoint_interval_set operator^(const disjoint_interval_set& a,
                                       const disjoint_interval_set& b);

Fluent Interface

add(I interval) / add(T lower, T upper)

disjoint_interval_set& add(I interval) &;
disjoint_interval_set&& add(I interval) &&;
disjoint_interval_set& add(value_type lower, value_type upper) &;

remove(I interval) / erase(I interval)

disjoint_interval_set& remove(I interval) &;
disjoint_interval_set& erase(I interval) &;

Analysis Operations

span()

[[nodiscard]] I span() const;
Returns smallest interval containing all intervals.

gaps()

[[nodiscard]] disjoint_interval_set gaps() const;
Returns intervals between components.

measure()

[[nodiscard]] value_type measure() const;
Returns total length.

density()

[[nodiscard]] double density() const;
Returns measure() / span().length().

Functional Operations

filter(Predicate pred)

template<typename Predicate>
disjoint_interval_set filter(Predicate pred) const;

for_each(Function fn)

template<typename Function>
void for_each(Function fn) const;

Iteration

const_iterator begin() const noexcept;
const_iterator end() const noexcept;

Use in range-based for loops:

for (const auto& interval : my_set) {
    // Process interval
}

Complete Example

See Examples for comprehensive usage examples.