2010-03-04 5 views
5

ho un 2-d vettoriale come vector < vector <coordinates> > v(points); dove coordina classe è:vettori smistamento in base alle dimensioni()

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

}; 

e punti è 20. come ordinare i singoli vettori V [i] basato su v [i] .size(), cioè basato sul numero di oggetti di coordinate inseriti in v [i]. ???

risposta

14

1) fare una funzione che confronta due vettori in base alle dimensioni:

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

2) sorta con esso

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

Probabilmente significa 'a.size ritorno() visitor

+0

@visitor: No egli meand std :: meno http://www.sgi.com/tech/stl/less .html –

+0

@Martin: Quindi dovrebbe essere 'std :: less () (a.size(), b.size())'. Non c'è quasi alcun motivo per usare meno qui, visto che tutto ciò che fa è wrap 'operator <' per confrontare i valori. – UncleBens

0
  1. fare una funzione che è possibile utilizzare qualsiasi attributi per confrontare gli oggetti e quindi utilizzare l'algoritmo di ordinamento STL() per ordinare il contenitore.

  2. sovraccaricare l'operazione < di quella classe e renderla uguale alla funzione precedente. Quindi è possibile utilizzare la funzione sort() fornita dai contenitori STL (come l'elenco STL).