set — C ++: пересечение двух диапазонов

Я пытаюсь найти пересечение двух диапазонов в 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 не может использоваться. Как я могу использовать это найти пересечение?

-3

Решение

Я нашел способ на 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}
}
3

Другие решения

Попробуй это.

#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}),

0

По вопросам рекламы [email protected]