Cómo ordenar la matriz de una estructura utilizando solo uno de sus miembros de datos en c ++ (STL)

Bueno.
Entonces, digamos que queremos ordenar una matriz de Pair struct con dos enteros a y b . Y queremos ordenarlo usando solo una variable entera.

struct Pair {
int a;
int b;
};

Ahora podemos usar la función de ordenación proporcionada por STL, pero para que pueda clasificar los elementos, necesitamos decirle sobre qué base queremos que se ordene esa matriz. Para este propósito, necesitamos escribir nuestra propia función de comparación que le dice a la función de clasificación que de dos estructuras es más pequeña que otra.
Me gusta esto

bool compare (par p1, par p2) {
// devuelve verdadero si el primer argumento es menor que el segundo
// más devuelve falso
if (p1.a <p2.a) devuelve verdadero;
de lo contrario devuelve falso;
}

Esto también se puede escribir brevemente así

bool compare (par p1, par p2) {
devuelve p1.a <p2.a;
}

Ahora nuestra función de comparación está lista, así que solo tenemos que llamar a la función de clasificación con nuestra matriz de estructura y la función de comparación.

sort (pares, pares + n, comparar);

Aquí pares es nuestra matriz de estructuras, y n es el tamaño de esa matriz.

Recursos:
sort – Referencia de C ++

¡Feliz codificación! 🙂

Suponga que desea ordenar una matriz de estructura de acuerdo con su amplitud. Simplemente defina la función de comparación en consecuencia:

#include
usando el espacio de nombres estándar;
struct rect
{
int longitud; amplitud int;
// miembros de datos
};
bool compare (rect a, rect b)
{
return a.breadth // Compara según la amplitud
}
int main () {
ios :: sync_with_stdio (0);
rect arr [5];

para (int i = 0; i <5; i ++)
{
cin >> arr [i] .length >> arr [i] .breadth;
}
sort (arr, arr + 5, compare); // std :: sort () función mediante comparación personalizada
// Aquí se ordena según la amplitud
para (int i = 0; i <5; i ++)
{
cout << arr [i] .length << "" << arr [i] .breadth << "\ n";
}
// tu código va aquí
devuelve 0;
}

Ideone.com

ordenar – C ++

Si usa c ++ STL, entonces el código tendrá el siguiente aspecto:

#include
#include
#include
usando el espacio de nombres estándar;
struct Employee {
doble salario;
nombre de cadena;
};
bool compare (const Employee & e1, const Employee & e2)
{
return e1.salary

}
impresión nula (const std :: vector & EmployeeList)
{

for (int i = 0; i {
cout << EmployeeList [i] .name << "" << EmployeeList [i] .salary << "\ n";
}

}
int main ()
{
vector EmployeeList;
int numOfEmployee;
cin >> numOfEmployee;
para (int i = 0; i {
Empleado e;
cin >> e.name;
cin >> e.salary;
EmployeeList.push_back (e);
}
cout << "Lista inicial de empleados \ n \ n";
print (lista de empleados);
sort (EmployeeList.begin (), EmployeeList.end (), compare);

cout << "Lista de empleados en orden de salario ordenado \ n \ n";
print (lista de empleados);
}