2

我正在尝试使用 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() 函数来检查一个点是否在区间内,但是还有另一个函数可以满足我的要求吗?

4

1 回答 1

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->second 是一个迭代器(35, 40)

小旁注:写作[0, 20]意味着封闭的区间,而(0, 20)意味着开放。

于 2013-09-14T08:22:29.247 回答