2010-03-04 13 views
5

Ich habe eine 2-D-Vektor wie vector < vector <coordinates> > v(points); wo Klasse Koordinaten:Sortiervektoren basierend auf size()

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

}; 

und Punkten 20 wie die einzelnen Vektoren [i], basierend auf v v sortieren [i] .size(), dh basierend auf der Anzahl der in v [i] gedrückten Koordinatenobjekte. ???

Antwort

14

1) mit einer Funktion machen, die basierend auf Größe zwei Vektoren vergleichen:

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

2) Sortieren mit ihm

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

Sie meinen wahrscheinlich 'return a.size() visitor

+0

@visitor: Nein, er meand std :: weniger http://www.sgi.com/tech/stl/less .html –

+0

@Martin: Dann sollte es 'std :: less sein () (a.size(), b.size())'. Es gibt kaum einen Grund, hier weniger zu verwenden, da alles, was es tut, der Operator '' ist, um die Werte zu vergleichen. – UncleBens

0
  1. eine Funktion machen, die man verwenden kann, was vergleichen Attribute die Objekte und verwenden Sie dann STL sort() - Algorithmus, um den Container zu sortieren.

  2. überlasten Sie die < Operation dieser Klasse und machen Sie es wie die obige Funktion. Dann können Sie die Funktion sort() verwenden, die von den STL-Containern bereitgestellt wird (wie die AWL-Liste).