c++ array - <algorithm>vector sort con objetos?





of strings (3)


Intente anular operador como "<", ">" usando las mismas propiedades de los objetos. Después de eso, puede redefinir alguna operación de ordenación.

Entonces, en la documentación de C ++ en el encabezado hay una función agradable que le permite ordenar vectores. Tengo una Person clase. Tengo un vector de punteros a los objetos de esa clase ( vector<Person*> ) y quiero comparar las personas por diferentes parámetros, por ejemplo, edad, longitud del nombre, etc.

Ya tengo funciones que devuelven las variables necesarias, pero no estoy seguro de cómo hacerlo. Aquí hay un enlace a la función de vector de ordenación en la referencia de c ++ http://www.cplusplus.com/reference/algorithm/sort/




Eso es tan simple:

struct student
{
  string name;
  string grade;
};

bool cmd(const student & s1, const student & s2)
{
   if (s1.name != s2.name) return s1.name < s2.name;
   return s1.grade < s2.grade;
}

Entonces:

vector<student> s;
sort(s.begin(), s.end(), cmd);

Los estudiantes serán ordenados alfabéticamente. Si dos estudiantes tienen el mismo nombre, se ordenarán usando su calificación.




A partir de 2018 existe una solución mucho más corta y elegante. Solo usa. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… .

Ejemplo:

var items = [
  { name: 'Edward', value: 21 },
  { name: 'Sharpe', value: 37 },
  { name: 'And', value: 45 },
  { name: 'The', value: -12 },
  { name: 'Magnetic', value: 13 },
  { name: 'Zeros', value: 37 }
];

// sort by value
items.sort(function (a, b) {
  return a.value - b.value;
});




c++ algorithm class sorting vector