Query Boost.Icl interval_set重叠间隔

时间:2013-09-14 07:22:55

标签: c++ boost

我正在尝试使用Boost.Icl来查找重叠间隔的大小。

例如: 给定间隔[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 个答案:

答案 0 :(得分:2)

查看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-&gt;是(35, 40)的迭代器

小旁注:写[0, 20]表示一个封闭的间隔,而(0, 20)表示开放。