16

ペアのベクトルの並べ替えについて質問があります。

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

このベクトルはすでにペアでいっぱいです。ここで、ペア内の double 値に基づいて、ベクトル内のペアを並べ替えたいと思いました

例:

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

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

ここで、double 値に基づいてペアを並べ替えたいと思います。ベクトル内の順序は次のようになります。

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

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

4

2 に答える 2

31
#include <algorithm>

int main(){

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

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

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

于 2013-08-07T20:10:20.387 に答える
28

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);
于 2013-08-07T20:10:06.307 に答える