Tôi phải so sánh hai đối tượng lớn hơn để bình đẳng.So sánh hai đối tượng hơi lớn cho sự bình đẳng
Thuộc tính của các đối tượng:
- Chứa tất cả các thành viên của mình theo giá trị (vì vậy không gợi ý để làm theo).
- Chúng cũng chứa một số
stl::array
. - Chúng chứa một số đối tượng khác giữ 1 và 2.
- Kích thước tối đa một số kB.
- Một số trong số
members
sẽ có nhiều khả năng khác hơn so với các loại khác, do đó dẫn đến ngắt nhanh hơn của thao tác so sánh nếu so sánh trước tiên. - Các đối tượng không thay đổi. Về cơ bản, thuật toán chỉ để đếm có bao nhiêu đối tượng giống nhau. Mỗi đối tượng chỉ được so sánh một lần với một số đối tượng "chính".
Cách tốt nhất để so sánh các đối tượng này là gì? Tôi thấy ba tùy chọn:
- Chỉ cần sử dụng đơn giản, không quá tải
operator==
. - Quá tải
==
và thực hiện so sánh từng thành viên, bắt đầu với các thành viên có khả năng khác nhau. - Quá tải
==
và xem đối tượng dưới dạng trường byte thuần và so sánh từng từ.
Vài suy nghĩ:
Lựa chọn 1 dường như tốt vì nó có nghĩa là số tiền ít nhất của công việc (và cơ hội để giới thiệu lỗi).
Tùy chọn 2 có vẻ tốt, bởi vì tôi có thể khai thác phỏng đoán về yếu tố nào khác biệt nhiều nhất. Nhưng có lẽ nó vẫn còn chậm hơn vì được xây dựng trong ==
của tùy chọn 1 là ridiculously nhanh.
Lựa chọn 3 có vẻ là nhất "cấp thấp" tối ưu hóa, nhưng đó là những gì các trình biên dịch có lẽ cũng không cho tùy chọn 1.
Vì vậy, các câu hỏi là:
- Có một nổi tiếng cách tốt nhất để giải quyết nhiệm vụ?
- Có phải một trong các tùy chọn không tuyệt đối không?
- Tôi có phải cân nhắc điều gì khác không?
So sánh băm là một tùy chọn cũng như – Caramiriel
Một tối ưu hóa tôi muốn làm khi bạn có một loạt các mảng, so sánh độ dài của tất cả các thành viên mảng tương ứng của hai đối tượng của bạn, và sau đó nếu tất cả các độ dài tương ứng phù hợp, THÌ nghĩ về việc so sánh các thành viên. – franji1