Может ли boost_set или interval_map создавать кластеры с количеством участников кластера? - PullRequest
0 голосов
/ 23 января 2019

Например, если у меня 5 интервалов ввода

[0,2]
[1,3]
[2,4]
[5,7]
[6,8]

результат должен указывать два кластера. Кластер 1

[0,4] with a count of 3
[5,8] with a count of 2

Но я обнаружил, что карта boost :: icl :: interval не агрегирует кластеры, а разбивает границы.

Например, следующий тест не дает мне результата, на который я надеялся

using namespace boost::icl;
interval_map<double,int> map;

map += std::make_pair(interval<double>::right_open(1.0,2.0), 1);
map += std::make_pair(interval<double>::right_open(2.1,3.0), 1);
map += std::make_pair(interval<double>::right_open(2.9,4.0), 1);

std::cerr << map.iterative_size() << std::endl;


EXPECT_EQ(1, map.find(1.5)->second); // passes
EXPECT_EQ(2, map.find(1.0)->second); // passes 
EXPECT_EQ(2, map.find(3.1)->second); // fails

и я понимаю почему, так как это по замыслу. Однако есть ли другая формулировка или библиотека, которую я могу использовать для достижения того, что мне нужно?

Полагаю, мне нужно было бы подсчитать количество слияний, которые происходят с boost :: icl :: interval_set. При добавлении нового интервала в контейнер он либо вставляет новый уникальный интервал, либо объединяется с предыдущим интервалом. Однако я не думаю, что количество раз, когда происходит слияние, сохраняется.

...