我正在尝试使用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()函数来检查一个点是否在这个区间内,但是还有另一个函数可以做我想要的吗?
答案 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)
表示开放。