Ayuda con C++ Ordenar por apellido y edad

Iniciado por bryanrz96, 1 Diciembre 2015, 21:50 PM

0 Miembros y 1 Visitante están viendo este tema.

bryanrz96

Problema:
Crear un programa que gestiona un elenco de personas que van ingresadas por el cliente, el cliente ingresa un nombre, apellido y edad para tres personas diferentes.
El programa, una vez ingresados los datos, imprime el elenco ordenado por apellido y sucessivamente por edad.
hasta el momento tengo esto, que me ordena por edad(El mayor)
Código (cpp) [Seleccionar]
struct persone
{
  string nome;
 string cognome;
 int edad;
};


int main ()
{
  persone arreglo[3];

  for (int i =0; i < 3; i++)
  {
      cout<<"Inserte Nombre " <<i+1 <<endl;
      cin>> arreglo[i].nome;
      cout<<"Inserte Cognome " <<i+1 <<endl;
      cin>> arreglo[i].cognome;
      cout<<"Inserte Edad " <<i+1 <<endl;
      cin>> arreglo[i].edad;
  }

  //ordenar  metodo burbuja por edades
  int temp = 0;
  for (int i =0; i < 3; i++)
     for (int j =i+1; j < 3; j++)
        if ( arreglo[i].edad < arreglo[j].edad )
        {
             temp = arreglo[i].edad;
             arreglo[i].edad = arreglo[j].edad;
             arreglo[j].edad = temp;
        }

  //ordenar  metodo burbuja por nombres
  string temp1 = "";
  for (int i =0; i < 3; i++)
     for (int j =i+2; j < 3; j++)
        if ( arreglo[i].nome < arreglo[j].nome )
        {
             temp1 = arreglo[i].nome;
             arreglo[i].nome = arreglo[j].nome;
             arreglo[j].nome = temp1;
        }
string temp2 = "";
  for (int i =0; i < 3; i++)
     for (int j =i+2; j < 3; j++)
        if ( arreglo[i].cognome < arreglo[j].cognome )
        {
             temp1 = arreglo[i].cognome;
             arreglo[i].cognome= arreglo[j].cognome;
             arreglo[j].cognome = temp2;
        }

  for (int i =0; i < 3; i++)
  {
      cout<<i+1<<": Nome " <<arreglo[i].nome<<endl;
      cout<<i+1<<": Cognome " <<arreglo[i].cognome<<endl;
      cout<<i+1<<": Età " <<arreglo[i].edad<<endl;
  }

 return 0;
}

No se donde esta el problema, los apellidos no me concuerdan con los nombres

ivancea96

Al ordenar, estás intercambiando solo los datos, ya sea edad, o nombre. Así, estás separando edades y nombres de sus estructuras originales, no lo está ordenando.
Si ordenas una estructura X por un criterio Y, tienes que intercambiar los datos X, no los datos Y.

En definitiva, cuando intercambias dentro de los bucles con burbuja, intercambia las estructuras enteras.