C++ - 查找两个范围的交集

111*_*001 11 c++ intersection range set-intersection

在C++中找到两个范围的交集的最佳方法是什么?例如,如果我有一个范围为[1 ... 20],包括[13 ... 45],则我想得到[13 ... 20],因为这是它们之间的交集.

我想过在C++中使用本机集合交集函数,但我首先要将范围转换为集合,这对于大值需要花费太多的计算时间.

Rei*_*ica 30

intersection = { std::max(arg1.min, arg2.min), std::min(arg1.max, arg2.max) };
if (intersection.max < intersection.min) {
  intersection.markAsEmpty();
}
Run Code Online (Sandbox Code Playgroud)


yau*_*yau 5

为了完整起见,我想添加一个"提升答案".

如果您已经在使用boost,则无需编写自己的代码,但可以使用仅限标头

#include <boost/numeric/interval.hpp>
Run Code Online (Sandbox Code Playgroud)

并使用intersect处理类型的函数interval<T>.