2017-02-08 14 views
-3

私はC++で2つの範囲の交差点を見つけようとしていますか?たとえば、範囲が[1..14]と[10..20]との間にある場合、[10..14]を取得したいと思います。C++:2つの範囲の交差

私は次のように方法を見つけた:

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を使用できないというエラーを示しています。交差点を見つけるにはどうすればいいですか?

+0

を定義していますか? – jpo38

+0

ブラインド "コピーアンドペースト"が良くありません。あなたがコピーしたコードでは、 'intersection'は明らかにメンバ' max'と 'min'を持つクラス型のオブジェクトです。 – WhiZTiM

+0

こちらをご覧くださいhttp://stackoverflow.com/help/mcve – jpo38

答えて

3

次のように私はSOの方法を見つけた:

intersection = { std::max(arg1.min, arg2.min), std::min(arg1.max, arg2.max) }; 
if (intersection.max < intersection.min) { 
    intersection.markAsEmpty(); 
} 

ブラインド "のコピーと貼り付け" 良いではありません。コードではcopied(認識する必要があります)は、交差点は明らかにメンバmaxminを持つクラス型のオブジェクトです。独自のユースケースについては


:どのように `intersection`

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} 
} 
0

これを試してください。

#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})のように指定できます。