web-dev-qa-db-fra.com

Tri d'un vecteur de paires

J'ai une question sur le tri d'un vecteur de paires:

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

ce vecteur est déjà rempli des paires. Maintenant, je voulais trier les paires à l'intérieur du vecteur en fonction de la double valeur à l'intérieur de la paire

EXEMPLE:

supposons que j'ai 3 paires à l'intérieur du vecteur. la paire 1 est à l'avant et la paire 3 à la fin. pair2 est au milieu:

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

maintenant je veux trier les paires en fonction de la valeur double. Pour que l'ordre à l'intérieur du vecteur soit:

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

Comment pourrais-je faire ça? Je suis assez coincé.

16
user2633791

En C++, vous pouvez avoir des fonctions de comparaison personnalisées qui spécifient comment décider si un élément passe avant un autre lors du tri. Dans votre cas, étant donné 2 paires, vous voulez que celui avec la valeur la plus faible pour le premier élément passe avant l'autre. Vous pouvez écrire une fonction de comparaison comme ceci:

// 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;

}

Maintenant, passez cette fonction dans votre méthode de tri:

//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());
}

Notez que vous n'avez pas besoin d'un comparateur personnalisé car le comparateur de paires par défaut fait ce que vous voulez. Il compare d'abord par le premier élément et s'ils sont identiques, il compare le deuxième élément de la paire.

30
Hossein Nasr