2016-04-07 22 views
0

のベクトルで最小のインデックスと最大要素を検索すると、次のコードを考えてみてください。このコードを使用ユーザ定義構造体

struct ColorSpacePoint 
{ 
    int X; 
    int Y; 
} 

std::vector<ColorSpacePoint> v{...}; // Initialized with data 

auto minMaxY = std::minmax_element(std::begin(v), std::end(v), 
    [](ColorSpacePoint const& lhs, ColorSpacePoint const& rhs) 
{ 
    return lhs.Y < rhs.Y; 
}); 

std::pair<ColorSpacePoint, ColorSpacePoint> result = 
    std::make_pair(ColorSpacePoint{minMaxY.first->X, minMaxY.first->Y}, 
        ColorSpacePoint{minMaxY.second->X, minMaxY.second->Y}); 

を、結果は、最小と最大の要素を含んでいます。どのように私はまた、STDを取得するためのコードを変更することができます::インデックスのペア:

std::pair<int, int> resultIndices = ... ; 
+0

Protip:自分のカスタム 'pair':' ColorSpacePoint'の代わりに['pair'](http://en.cppreference.com/w/cpp/utility/pair)を使うと、すでに比較があります['minmax'](http://en.cppreference.com/w/cpp/algorithm/minmax)を使用できるように定義された演算子を使用して、比較演算子を定義し、' minmax'を使用します。 –

答えて

3

あなたはすでにあなたが必要とするすべてであるイテレータ、持っている:ベクトル記憶が連続しているので、

const auto resultIndices = std::make_pair(
    std::distance(std::begin(v), minMaxY.first), 
    std::distance(std::begin(v), minMaxY.second) 
); 

をこれは事実上ポインタ減算であり、従って驚くほど高速です。

+0

驚くばかり、答えてくれてありがとう! – Schnigges

関連する問題