Requisitos previos: std::sort en C++ , vector en C++ , inicializar un vector en C++ .
CPP
// C++ program to sort a vector in non-decreasing // order. #include <bits/stdc++.h> using namespace std; int main() { vector<int> v{ 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 }; sort(v.begin(), v.end()); cout << "Sorted \n"; for (auto x : v) cout << x << " "; return 0; }
Sorted 0 1 2 3 4 5 6 7 8 9
¿Cómo ordenar en orden descendente?
sort() toma un tercer parámetro que se utiliza para especificar el orden en que se ordenarán los elementos. Podemos pasar la función «mayor()» para ordenar en orden descendente. Esta función hace la comparación de una manera que antepone los elementos más grandes.
CPP
// C++ program to sort a vector in non-increasing // order. #include <bits/stdc++.h> using namespace std; int main() { vector<int> v{ 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 }; sort(v.begin(), v.end(), greater<int>()); cout << "Sorted \n"; for (auto x : v) cout << x << " "; return 0; }
Sorted 9 8 7 6 5 4 3 2 1 0
¿Cómo ordenar en un orden particular?
También podemos escribir nuestra propia función de comparación y pasarla como tercer parámetro.
La función de comparación comprueba si la declaración devuelta es verdadera o falsa y devuelve un valor booleano que se pasa a la función de clasificación.
Por ejemplo, digamos Intervalo i1 = { 6 , 8 } e Intervalo i2 = { 1, 9 }. Cuando esto se pasa a la función de comparación, compara i1.start e i2.start . Como i1.start (=6) < i2.start (=1), la función de comparación devuelve false . Esto significa que el Intervalo i1 no debe colocarse antes del Intervalo i2. A continuación se muestra el código para esta función.
CPP
// A C++ program to sort vector using // our own comparator #include <bits/stdc++.h> using namespace std; // An interval has start time and end time struct Interval { int start, end; }; // Compares two intervals according to starting times. bool compareInterval(Interval i1, Interval i2) { return (i1.start < i2.start); } int main() { vector<Interval> v { { 6, 8 }, { 1, 9 }, { 2, 4 }, { 4, 7 } }; // sort the intervals in increasing order of // start time sort(v.begin(), v.end(), compareInterval); cout << "Intervals sorted by start time : \n"; for (auto x : v) cout << "[" << x.start << ", " << x.end << "] "; return 0; }
Intervals sorted by start time : [1, 9] [2, 4] [4, 7] [6, 8]
¿Cómo ordenar la array en orden descendente en función de algún parámetro usando una función de comparación?
Se puede pasar una función de comparación de tal manera que los elementos de la array se clasifiquen en orden descendente.
C++
// A C++ program to sort vector using // our own comparator #include <bits/stdc++.h> using namespace std; // An interval has start time and end time struct Interval { int start, end; }; // Compares two intervals according to ending times in descending order. bool compareInterval(Interval i1, Interval i2) { return (i1.end > i2.end); } int main() { vector<Interval> v { { 6, 8 }, { 1, 9 }, { 2, 4 }, { 4, 7 } }; // sort the intervals in decreasing order of // end time sort(v.begin(), v.end(), compareInterval); cout << "Intervals sorted by ending time in descending order : \n"; for (auto x : v) cout << "[" << x.start << ", " << x.end << "] "; return 0; }
Intervals sorted by ending time in descending order : [1, 9] [6, 8] [4, 7] [2, 4]
Artículos relacionados:
Ordenando un vector de pares | Set 1
Ordenando un vector de pares | conjunto 2