2010-03-04 5 views
5

i tienen un vector 2-d como vector < vector <coordinates> > v(points); donde coordina clase es:vectores de clasificación basados ​​en el tamaño()

class coordinate{ 
    public : 
    int x; 
    int y; 
    coordinate(){ 
     x=0; 
     y=0; 
    } 

}; 

y puntos es 20. cómo ordenar los vectores individuales v [i] basado en v [i] .size(), es decir, basado en el número de objetos de coordenadas insertados en v [i]. ???

Respuesta

14

1) hacer una función que compara dos vectores basados ​​en el tamaño:

bool less_vectors(const vector& a,const vector& b) { 
    return a.size() < b.size(); 
} 

2) una especie con ella

sort(v.begin(),v.end(),less_vectors); 
+0

probablemente Quieres decir 'a.size retorno() visitor

+0

@visitor: No se MEAND std :: menos http://www.sgi.com/tech/stl/less .html –

+0

@Martin: Entonces debería ser 'std :: less () (a.size(), b.size())'. Apenas hay ninguna razón para usar menos aquí, viendo que todo lo que hace es envolver 'operator <' para comparar los valores. – UncleBens

0
  1. hacer una función que se puede utilizar cualquier atributos para comparar los objetos y luego use el algoritmo STL sort() para ordenar el contenedor.

  2. sobrecargar el funcionamiento < de esa clase y hacerla igual que la función anterior. Luego puede usar la función sort() proporcionada por los contenedores STL (como la lista STL).

Cuestiones relacionadas