Я пытаюсь найти пересечение двух диапазонов в 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 не может использоваться. Как я могу использовать это найти пересечение?
Я нашел способ на SO следующим образом:
intersection = { std::max(arg1.min, arg2.min), std::min(arg1.max, arg2.max) }; if (intersection.max < intersection.min) { intersection.markAsEmpty(); }
Слепой «Копирование и вставка» не годится. В коде вы скопированный (что вы должны признать), пересечение является объектом типа класса, который, очевидно, имеет члены 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}
}
Попробуй это.
#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})
,