Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/05/2015, 14:05
jose_27
 
Fecha de Ingreso: febrero-2015
Mensajes: 20
Antigüedad: 9 años, 9 meses
Puntos: 0
Ordenar un arreglo de objetos de manera descendete

Hola tengo un arreglo de objetos que se trata de un parque de diversiones en el cual cada atraccion tiene dos atributos su nombre (string) y su nivel de diversion (int).

yo leo 3 valores m que es la cantidad de atracciones, que es mayor a 1 y menor 100000; un n que son la cantidad de atracciones populares, osea, las atracciones que tienen un nivel de divesion mas alto y tambien leo un valor h que por ahora no lo estoy usando pero despues lo usare por que son para leer las aristas con las que se conectaran las atracciones,

por ahora mi problema es que tengo que ordenar ese arreglo de mayor a menor ya que las atracciones con mayor nivel de diversion van primero...

y bueno yo estaba usando el ordenamiento de seleccion (selection sort) que es de menor a mayor pero lo modifique como yo crei para poder ordenarlo ascendentemente, pero mi problema es que no me ordena y nunca antes habia ordenado un arreglo de objetos y tengo dudas con eso, podrian ayudarme por favor con el codigo

Código C++:
Ver original
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. class atraccion {
  6.     private:
  7.     int x;
  8.     string name;
  9.     public:
  10.    
  11.     atraccion () {}
  12.     atraccion (int var, string nnombre){
  13.         x=var;
  14.         name = nnombre;
  15.     }
  16.     ~atraccion() {}
  17.    
  18.     void set_x (int val) {              //modifica el x
  19.         x = val;
  20.     }
  21.    
  22.     int get_x () {                      //devuelve el x
  23.         return x;
  24.     }
  25.    
  26.     void set_name ( string nom) {           //modifica el nombre
  27.         name =nom;
  28.     }
  29.    
  30.     string get_name () {                    //devuelve el nombre
  31.         return name;
  32.     }
  33. };
  34.  
  35.  
  36.  
  37. int main (){
  38.     int m, n, h,div;
  39.     int posmayor,mayor;
  40.     int mat[h][h];
  41.     int x,y;
  42.     int indexmax,aux;
  43.     string nombre;
  44.     atraccion ar [100000];              //arreglo que almacena cada atraccion
  45.    
  46.     cin>>m>>n>>h;
  47.    
  48.         for (int i=0;i<m;i++) {
  49.             cin>>nombre;
  50.             cin>>div;
  51.             ar[i].set_name(nombre);
  52.             ar[i].set_x (div);
  53.         }
  54.        
  55.         for (int h=0;h<=m-1;h++){               //ordenamiento
  56.             posmayor = h;
  57.             mayor = ar[h].get_x();
  58.             for (int k=h+1; k<=m; k++){
  59.                 if (ar[k].get_x() > mayor) {
  60.                     mayor = ar[k].get_x();
  61.                     posmayor =k;
  62.                 }
  63.             }
  64.             ar[posmayor] = ar[h];
  65.             ar[h].set_x(mayor);
  66.         }
  67.        
  68.         for (int j=0;j<n;j++) {
  69.             cout<<ar[j].get_name()<<endl;
  70.         }
  71.    
  72.     return 0;
  73. }