Да, поскольку интервалы не могут перекрываться, двоичное дерево является правильной структурой данных. Если вам не нужны быстрые обновления, это может быть так же просто, как отсортированная последовательность конечных точек интервала; запрос значения функции в определенном месте можно выполнить, например, с помощью одного из методов двоичного поиска STL std::lower_bound
или std::upper_bound
, оценивая диапазон с помощью двух поисков. Тем не менее, для быстрых обновлений лучше всего подходит самобалансирующееся двоичное дерево.
Стандартная библиотека определяет контейнер с древовидным доступом: std::map
(хотя это не обязательно для реализации с использованием двоичного дерева, обычно это так).
для полноты следует отметить, что библиотека Boost ICL имеет interval_map
, std::map
-подобный контейнер, который использует интервалы в качестве ключей и с агрегированием при вставке семантика.