Ordenar un std :: vector <std :: pair > por la cadena?

¿Cómo puedo ordenar este vector comparando el pair.first que es std::string ? (sin proporcionar una función de comparación estática, ni usar boost).

 std::vector > v; std::sort(v.begin(), v.end()); 

std::pair sobrecarga operator< para ordenar primero por el first elemento y luego por el second elemento. Por lo tanto, si solo ordena el vector utilizando el orden de clasificación predeterminado ( operator< ), obtendrá el orden deseado.

Realmente me gusta la respuesta de James, pero hay otra opción que quizás desee considerar: simplemente canalice todo en un std::map :

 std::map myMap(v.begin(), v.end()); 

O bien, si tiene cadenas duplicadas, std::multimap :

 std::multimap myMultiMap(v.begin(), v.end()); 

Esto tiene la ventaja adicional de que si necesita agregar o quitar nuevos pares de clave / valor, puede hacerlo en O (lg n), en oposición a O (n) para el vector ordenado.

Si realmente debes usar un vector, entonces sigue la respuesta de James. Sin embargo, si tiene un vector de pares, hay muchas posibilidades de que realmente desee un std::map .

Puede usar un comparador personalizado para ordenar en los pares ‘ .first solamente.

 sort(begin, end, compose2(less(), select1st >(), select1st >()));