Nếu tôi có một lớp mà tôi muốn có thể sắp xếp (tức là hỗ trợ khái niệm ít hơn), và nó có một số mục dữ liệu như tôi cần phải làm theo thứ tự từ điển, tôi cần một cái gì đó như sau:Cách đơn giản nhất để xác định so sánh lexicographic cho các thành phần của một lớp là gì?
struct MyData {
string surname;
string forename;
bool operator<(const MyData& other) const {
return surname < other.surname || (surname==other.surname && forename < other.forename); }
};
Điều này trở nên khá không thể quản lý được với bất kỳ điều gì có hơn 2 thành viên dữ liệu. Có cách nào đơn giản hơn để đạt được nó? Các thành viên dữ liệu có thể là bất kỳ lớp so sánh nào.
giải pháp thú vị. Có vẻ như một sự xấu hổ để mất các lĩnh vực được đặt tên mặc dù như nhìn thấy nội dung của lớp trong trình gỡ lỗi trở nên khó khăn hơn. –
Bạn có thể giữ các trường được đặt tên và chỉ sử dụng bộ tuple cho mục đích so sánh, ví dụ: 'return boost :: tie (tên họ, tên)
UncleBens
Thậm chí tốt hơn, quấn' tie' trong một hàm thành viên. Sau đó, bạn chỉ phải duy trì một danh sách duy nhất của thứ tự từ điển. –