2013-09-14 2 views
1

Я пытаюсь использовать Boost.Icl, чтобы найти размер перекрывающихся интервалов.Query Boost.Icl interval_set интервалы перекрытия

Например: Указанные интервалы [0, 20], [10, 30], [35, 40]

interval_set<int> iset; 
iset += interval<int>::open(0, 20); 
iset += interval<int>::open(10, 30); 
iset += interval<int>::open(35, 40); 

Я хочу запросить перекрывающийся длину для интервала [20, 40] по сравнению с теми в дереве, которые должны быть 15 (20-> 30 и 35-> 40)

Я могу найти только функцию contains(), которая проверяет, находится ли точка внутри интервала, но есть ли другая функция, которая делает то, что я хочу?

ответ

1

Посмотрите на функцию equal_range члена:

auto itRes = iset.equal_range(boost::icl::interval<int>::closed(20, 40)); 

for(auto it = itRes.first; it != itRes.second; ++it) 
{ 
    std::cout << "(" << it->lower() << ", " << it->upper() << ")\n"; 
} 

itRes.first является итератор (20, 30) и itRes-> второй итератор (35, 40)

Малый Sidenote: написание [0, 20] означает замкнутый интервал , где (0, 20) означает открытый.

+0

Спасибо, ваше решение работает – Jeremy

Смежные вопросы