Ordenando un vector en C++

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;
}
Producción

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;
}
Producción

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;
}
Producción

Intervals sorted by start time : 
[1, 9] [2, 4] [4, 7] [6, 8] 

CPP-STL-Self-Paced-Course

¿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;
}
Producción

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
 

Publicación traducida automáticamente

Artículo escrito por kartik y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *