web-dev-qa-db-ja.com

ペアのベクトルの並べ替え

ペアのベクトルのソートについて質問があります:

std::vector<std::pair<double,Processor*>> baryProc;

このベクトルはすでにペアで埋められています。今、私はペア内の二重値に基づいてベクトル内のペアをソートしたかった

例:

ベクトル内に3つのペアがあるとします。ペア1は前面にあり、ペア3は最後にあります。 pair2は中央にあります:

pair1(1, proc1) 
pair2(3, proc2)
pair3(2.5, proc3)

今、私は二重値に基づいてペアをソートしたい。したがって、ベクトル内の順序は次のとおりです。

pair1(1, proc1) 
pair3(2.5, proc3)
pair2(3, proc2)

どうすればこれができますか?私はかなり立ち往生しています。

16
user2633791

C++では、ソート時に1つの要素が別の要素よりも先に進むかどうかを決定する方法を指定するカスタムコンパレーター関数を使用できます。あなたの場合、2つのペアが与えられた場合、最初の要素の値が低い方が他の要素よりも先になるようにします。次のようなコンパレータ関数を作成できます。

// This function returns true if the first pair is "less"
// than the second one according to some metric
// In this case, we say the first pair is "less" if the first element of the first pair
// is less than the first element of the second pair
bool pairCompare(const std::pair<double, Processor*>& firstElem, const std::pair<double, Processor*>& secondElem) {
  return firstElem.first < secondElem.first;

}

次に、この関数をsortメソッドに渡します。

//The sort function will use your custom comparator function 
std::sort(baryProc.begin(), baryProc.end(), pairCompare);
28
maditya
#include <algorithm>

int main(){

    std::vector<std::pair<double,Processor*>> baryProc;

    std::sort(baryProc.begin(),baryProc.end());
}

Pairのデフォルトのコンパレーターが希望することを行うため、カスタムコンパレーターは必要ないことに注意してください。最初に最初の要素で比較し、それらが同一である場合、ペアの2番目の要素を比較します。

30
Hossein Nasr