Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ordenar vector con struct?

Estas en el tema de Ordenar vector con struct? en el foro de C/C++ en Foros del Web. Hola, estoy tratando de ordenar 1 vector que tiene como tipo de datos struct, pero con criterios de comparacion: 1 ejemplo que tenog es el ...
  #1 (permalink)  
Antiguo 20/05/2013, 07:05
 
Fecha de Ingreso: noviembre-2012
Mensajes: 12
Antigüedad: 12 años
Puntos: 0
Pregunta Ordenar vector con struct?

Hola, estoy tratando de ordenar 1 vector que tiene como tipo de datos struct, pero con criterios de comparacion:

1 ejemplo que tenog es el sieguiente:

Entrada:

USA 34 20 13
Mexico 1 1 4
China 28 14 19
Argentina 0 1 1

Salida:
USA
China
Mexico
Argentina

pues para llegar a la salida tengo que compar las primeras columnas, despues las 2das y despues las 3ras, es oro plata y bronce y asi me quedo con el nombre del mejor pais.

Estos datos los he almacenado en un vector de struct, pero al implementar la funcion compare no me funcione como debe ser el criterio de comparacion, en que estoy mal?

estoy probando con 1 ejemplo sencillo primero..aqui le pongo algo..

Código:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <algorithm>

using namespace std;

struct date {   
   int a, b;   
};

bool compare(date x,  date y )
{
     if ( x.a > y.a ) return true;
     else if ( x.a < y.a ) return false;
  return 0;
} 

int main () 
{
    
    vector<date> vect;
    
    date x;
    x.a = 5;
    x.b = 9;
    
    date y;
    y.a = 5;
    y.b = 7;
    
    date z;
    z.a = 5;
    z.b = 99;
    
    vect.push_back(x);
    vect.push_back(y);
    vect.push_back(z);
    
    sort(vect.begin(), vect.end(), compare);
    
    for (int i =0; i < vect.size(); i++)
      cout<< vect[i].a <<" "<<vect[i].b << endl;
    
    system("pause");
}
saludos
mariam
  #2 (permalink)  
Antiguo 20/05/2013, 07:23
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 12 años, 4 meses
Puntos: 28
Respuesta: Ordenar vector con struct?

Creo que se hace con listas:

Código:
#include <list>

//...

list<date> Lista;
    
    date x;
    x.a = 5;
    x.b = 9;
    
    date y;
    y.a = 5;
    y.b = 7;
    
    date z;
    z.a = 5;
    z.b = 99;
    
    Lista.push_back(x);
    Lista.push_back(y);
    Lista.push_back(z);
    
    Lista.sort(compare);

 for (list<date>::iterator it = Lista.begin(); it != Lista.end(); it++)
      cout<< it->a <<" "<< it->b << endl;
  #3 (permalink)  
Antiguo 20/05/2013, 07:47
 
Fecha de Ingreso: noviembre-2012
Mensajes: 12
Antigüedad: 12 años
Puntos: 0
Respuesta: Ordenar vector con struct?

basicamente lo que haces ahi, es lo mismo que yo hago, mi pregunta era como arreglar el criterio de comparacion dela funcion Compare(..)?

s2
mariam
  #4 (permalink)  
Antiguo 20/05/2013, 07:50
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 12 años, 4 meses
Puntos: 28
Respuesta: Ordenar vector con struct?

Huy perdon, creía que no te compilaba.

Podrías concretar eso de que "no funciona como debería"?
  #5 (permalink)  
Antiguo 20/05/2013, 08:12
 
Fecha de Ingreso: noviembre-2012
Mensajes: 12
Antigüedad: 12 años
Puntos: 0
Respuesta: Ordenar vector con struct?

Hola, mira a la hora se hacer el Sort(..) utilizo la funcion Compare, pero es que tengo que hacer las comparaciones como dice el ejemplo:

bool compare(date x, date y )
{
if ( x.a > y.a ) return true;
else if ( x.a < y.a ) return false;
return 0;
}

tengo
a = 5; b = 8 ;
a = 5; b = 2 ;
a = 6; b = 8 ;
a = 4; b = 3 ;
a = 4; b = 65 ;

la salida deberia ser:
4 3
4 65
5 2
5 8
6 8
  #6 (permalink)  
Antiguo 20/05/2013, 09:00
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 12 años, 4 meses
Puntos: 28
Respuesta: Ordenar vector con struct?

Y que salida te sale?

Etiquetas: funcion, int, string, struct, vector
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:46.