C++:两个范围的交集
C++: Intersection Of two ranges
我试图在 C++ 中找到两个范围的交集?例如,如果我有一个范围为 [1..14](含),另一个范围为 [10..20](含),我想得到 [10..14],因为这是它们之间的交集。
我在 SO 上找到了如下方法:
intersection = { std::max(arg1.min, arg2.min), std::min(arg1.max, arg2.max) };
if (intersection.max < intersection.min) {
intersection.markAsEmpty();
}
我有几个变量如下:
unsigned long long int min1,min2,max1,max2
我正在为其寻找交集。然后我做了以下事情:
intersection = { std::max(min1, min2), std::min(max1, max2) };
if (intersection.max < intersection.min) {
intersection.markAsEmpty();
}
但是这样就报了unsigned long long int不能用的错误。我如何使用它找到交点?
试试这个。
#include <algorithm>
#include <utility>
struct range {
unsigned long long min, max;
};
range intersect(const range& first, const range& second) {
return {std::max(first.min, second.min), std::min(first.max, second.max)};
}
您可以这样称呼它,例如 intersect({min1, max1}, {min2, max2})
。
I found a way on SO as follows :
intersection = { std::max(arg1.min, arg2.min), std::min(arg1.max, arg2.max) };
if (intersection.max < intersection.min) {
intersection.markAsEmpty();
}
盲目"Copy and Pasting"不好。在您 copied 的代码中(您应该承认),交集是一个 class 类型的对象,它显然具有成员 max
和 min
.
对于您自己的用例:
unsigned long long int min1,min2,max1,max2
......
auto Min = std::max(min1, min2);
auto Max = std::min(max1, max2);
if (Min < Max) {
// There's an intersection. represented by {Min Max}
}
也许这会有所帮助。
说对于范围[l1, r1]
,[l2, r2]
它们之间的交集可以计算为:
if ((r1 < l2) || (r2 < l1)) then no intersection exits.
else l = max(l1, l2) and r = min(r1, r2)
只需遍历范围 [l, r]
即可获得交集值。
我试图在 C++ 中找到两个范围的交集?例如,如果我有一个范围为 [1..14](含),另一个范围为 [10..20](含),我想得到 [10..14],因为这是它们之间的交集。
我在 SO 上找到了如下方法:
intersection = { std::max(arg1.min, arg2.min), std::min(arg1.max, arg2.max) };
if (intersection.max < intersection.min) {
intersection.markAsEmpty();
}
我有几个变量如下:
unsigned long long int min1,min2,max1,max2
我正在为其寻找交集。然后我做了以下事情:
intersection = { std::max(min1, min2), std::min(max1, max2) };
if (intersection.max < intersection.min) {
intersection.markAsEmpty();
}
但是这样就报了unsigned long long int不能用的错误。我如何使用它找到交点?
试试这个。
#include <algorithm>
#include <utility>
struct range {
unsigned long long min, max;
};
range intersect(const range& first, const range& second) {
return {std::max(first.min, second.min), std::min(first.max, second.max)};
}
您可以这样称呼它,例如 intersect({min1, max1}, {min2, max2})
。
I found a way on SO as follows :
intersection = { std::max(arg1.min, arg2.min), std::min(arg1.max, arg2.max) }; if (intersection.max < intersection.min) { intersection.markAsEmpty(); }
盲目"Copy and Pasting"不好。在您 copied 的代码中(您应该承认),交集是一个 class 类型的对象,它显然具有成员 max
和 min
.
对于您自己的用例:
unsigned long long int min1,min2,max1,max2
......
auto Min = std::max(min1, min2);
auto Max = std::min(max1, max2);
if (Min < Max) {
// There's an intersection. represented by {Min Max}
}
也许这会有所帮助。
说对于范围[l1, r1]
,[l2, r2]
它们之间的交集可以计算为:
if ((r1 < l2) || (r2 < l1)) then no intersection exits.
else l = max(l1, l2) and r = min(r1, r2)
只需遍历范围 [l, r]
即可获得交集值。