2010-03-04 52 views
5

tôi có một 2-d vector như vector < vector <coordinates> > v(points); nơi tọa độ lớp là:vectơ sắp xếp dựa trên kích thước()

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

}; 

và điểm là 20. làm thế nào để sắp xếp các vectơ cá nhân v [i] dựa trên v [i] .size(), tức là dựa trên số đối tượng tọa độ được đẩy vào v [i]. ???

Trả lời

14

1) thực hiện một chức năng mà so sánh hai vectơ dựa trên kích thước:

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

2) loại với nó

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

Bạn có thể có nghĩa là 'trở lại a.size() visitor

+0

@visitor: Không có ông meand std :: ít http://www.sgi.com/tech/stl/less .html –

+0

@Martin: Sau đó, nó phải là 'std :: ít hơn () (a.size(), b.size())'. Hầu như không có lý do gì để sử dụng ít hơn ở đây, thấy rằng tất cả những gì nó làm là quấn 'toán tử <' để so sánh các giá trị. – UncleBens

0
  1. làm một chức năng mà bạn có thể sử dụng bất cứ thuộc tính để so sánh các đối tượng và sau đó sử dụng thuật toán sắp xếp STL() để sắp xếp vùng chứa.

  2. quá tải hoạt động < của lớp đó và làm cho nó giống như chức năng ở trên. Sau đó, bạn có thể sử dụng hàm sort() được cung cấp bởi các container STL (như danh sách STL).

Các vấn đề liên quan