Tri d’un std :: vector <std :: pair > par la chaîne?

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