我正在尝试找到三个行号之间的交集。
例如:
line 1 = 1.1 - 9.9
line 2 = 2.4 - 8.5
line 3 = 6.4 - 9
答案是6.4- 8.5
。
我目前的方式还有很多其他方面。还有其他方法可以做到这一点,然后有很多,如果否则。
答案 0 :(得分:3)
您可以使用递归模板执行此操作:
#include <algorithm>
template<typename T>
auto intersection(const T& a, const T&b)
{
return std::make_pair(std::max(a.first, b.first), std::min(a.second, b.second));
}
template<typename T, typename... Rest>
auto intersection(const T& a, const T&b, const Rest&... r)
{
return intersection(intersection(a, b), r...);
}
int main()
{
auto const line1 = std::make_pair(1.1, 9.9);
auto const line2 = std::make_pair(2.4, 8.5);
auto const line3 = std::make_pair(6.4, 9.);
return intersection(line1, line2, line3) != std::make_pair(6.4, 8.5);
}
请注意,在这个简单的实现中,first
&gt; = second
的对意味着空间隔。
更简单的功能是使用带min
个参数的max
和initializer_list
形式:
#include <algorithm>
template <typename ...Ts>
auto intersection(const Ts&... ps)
{
return std::make_pair(std::max({ps.first...}), std::min({ps.second...}));
}
感谢Jarod42建议。
答案 1 :(得分:0)
由于这被标记为C ++,我将假定需要C ++答案。
提升间隔库正好解决了这个问题以及其他与区间运算有关的问题。 http://www.boost.org/doc/libs/1_63_0/libs/numeric/interval/doc/interval.htm