Comment puis-je sortinger ce vector
en comparant la pair.first
qui est un std::ssortingng
? (sans fournir une fonction de comparaison statique, ni utiliser boost).
std::vector > v; std::sort(v.begin(), v.end());
std::pair
surcharge l’ operator<
pour sortinger d'abord par le first
élément, puis par le second
élément. Ainsi, si vous sortingez simplement le vector
utilisant l'ordre de sorting par défaut ( operator<
), vous obtiendrez l'ordre souhaité.
J’aime beaucoup la réponse de James, mais il y a une autre option que vous pourriez envisager: vous pouvez simplement tout canaliser vers un std::map
:
std::map myMap(v.begin(), v.end());
Ou, si vous avez des chaînes en double, un std::multimap
:
std::multimap myMultiMap(v.begin(), v.end());
Cela présente l’avantage supplémentaire que si vous devez ensuite append ou supprimer de nouvelles paires clé / valeur, vous pouvez le faire dans O (lg n), par opposition à O (n) pour le vecteur sortingé.
Si vous devez vraiment utiliser un vecteur, répondez avec la réponse de James. Cependant, si vous avez un vecteur de paires, il y a de fortes chances que vous souhaitiez vraiment un std::map
.
Vous pouvez utiliser un comparateur personnalisé pour ordonner uniquement sur les paires.
sort(begin, end, compose2(less(), select1st >(), select1st >()));