2011-07-21 51 views
10

Làm cách nào để sắp xếp một vector STL dựa trên hai tiêu chí so sánh khác nhau? Hàm sort() mặc định chỉ lấy một đối tượng sắp xếp đơn.Sắp xếp một vector STL trên hai giá trị

+0

Bạn có thể xây dựng thêm chi tiết không? Tiêu chí nào bạn muốn? – iammilind

+0

Thông tin thêm –

+0

Tôi sắp xếp danh sách các đối tượng có hai thuộc tính khác nhau: khoảng cách và tầm quan trọng. Một trong những tính chất so sánh này (tầm quan trọng cao hơn) sẽ ghi đè (khoảng cách gần hơn) của các thuộc tính khác. Vì vậy, nếu nhập khẩu của một đối tượng là 1 và của người kia là 0, nó sẽ được sắp xếp cao hơn thứ hai ngay cả khi khoảng cách lớn hơn. Tôi không thể tìm ra cách để làm điều đó chỉ với một so sánh. – toastie

Trả lời

25

Bạn cần kết hợp hai tiêu chí thành một. Đây là ví dụ về cách bạn sắp xếp cấu trúc với trường đầu tiên và thứ hai dựa trên trường đầu tiên, sau đó là trường thứ hai.

#include <algorithm> 

struct MyEntry { 
    int first; 
    int second; 
}; 

bool compare_entry(const MyEntry & e1, const MyEntry & e2) { 
    if(e1.first != e2.first) 
    return (e1.first < e2.first); 
    return (e1.second < e2.second); 
} 

int main() { 
    std::vector<MyEntry> vec = get_some_entries(); 
    std::sort(vec.begin(), vec.end(), compare_entry); 
} 

Chú ý: thực hiện compare_entry cập nhật để sử dụng mã từ Nawaz.

+0

+1, Tiến về phía trước. Tôi cũng nghĩ như vậy. Nhưng vẫn còn nghi ngờ nếu OP đang suy nghĩ trong cùng một dòng. – iammilind

+0

Tuyệt vời, đã hoạt động, cảm ơn bạn! Tôi quên phần if (e1.first == e2.first), vì vậy nó đã thất bại đối với tôi. – toastie

+2

@Michael: Tôi đã thêm một triển khai khác của hàm 'compary_entry'. Hy vọng nó ổn với bạn. :-) +1 BTW. – Nawaz

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