Могу ли я сделать это с помощью Boost interval_map?

Я хочу эффективно обрабатывать интервалы. Например, в моем примере интервалы выглядят следующим образом:

[10, 20], [15, 25], [40, 100], [5, 14]

Интервалы являются замкнутыми и целыми числами, а некоторые из интервалов могут быть перекрыты. Я хочу эффективно найти перекрывающиеся интервалы для данного запроса . Например, если задано [16, 22] :

[10, 20], [15, 25]

Вышеуказанные интервалы следует рассчитывать как интервалы с превышением допустимого значения.

В настоящее время я пишу дерево интервалов на основе красно-черного дерева (ссылка: CLRS, Introduction to Algorithms). Хотя обнаружение всех перекрывающихся интервалов может быть O (n), время выполнения должно быть меньше. Обратите внимание, что интервалы можно удалять и вставлять.


Однако я только что обнаружил, что Boost имеет interval_map и interval_set : http://www.boost.org/doc/libs/1_46_1 /libs/icl/doc/html/index.html

Я пробовал, но поведение для меня очень странное. Например, если сначала вставляется [2, 7] , а затем [3, 8] , то результирующая карта будет иметь [2, 3) ], [3, 7] и (7, 8] . То есть, когда вставляется новый интервал, разделение выполняется автоматически.

Могу ли я отключить эту функцию? Или Boost interval_map подходит для моей цели?

6
задан ildjarn 2 November 2011 в 20:23
поделиться