Các container kết hợp có thứ tự unordered_set
, unordered_map
vv không có ít hơn điều hành operator<
, không phải là một hàm thành viên cũng không phải là một chức năng miễn phí. Tại sao? Không có chuyên môn nào của less
. Các loại hash_*
của SGI STL cũng thiếu tính năng này.Tại sao các vùng chứa liên kết không có thứ tự thực hiện toán tử nhỏ hơn?
Nếu chúng ta loại trừ khái niệm về loại cơ bản, tất cả các loại thùng chứa thực hiện các yêu cầu của các loại thường xuyên theo quy định ví dụ trong Stepanov & McJones' Các yếu tố của Lập trình. Ngoại lệ duy nhất là các loại liên kết không có thứ tự, thiếu operator<
.
tôi không thể đưa ra một thực hiện hiệu quả của một nhà điều hành như vậy là phù hợp với định nghĩa được bình đẳng, vì vậy hiệu quả có thể là lý do? Mặt khác, operator==
cho container kết hợp có thứ tự trong một số trường hợp cần phải rehash mọi phần tử của một container và nhìn nó lên trong khác - trung bình O (N), nhưng trường hợp tồi tệ nhất O (n ²).
liên quan: [C++ 11: Có những lý do tại sao một số loại thông thường không nên có 'std :: băm 'chuyên ngành?] (http: // stackoverflow.com/q/29969322 /) – dyp
Trong EoP, 'toán tử +' cũng được định nghĩa giữa các trình lặp và các số nguyên mà nó không phải là một hoạt động O (1). Ngoài ra, [Ghi chú về lập trình] (http://stepanovpapers.com/notes.pdf) có một nhận xét ở trang 28 cho thấy rằng hiệu quả không phải là lý do. – dyp
Nếu các phần tử của thùng chứa là khái niệm 'không có thứ tự', làm cách nào bạn có thể so sánh hai thùng chứa đó một cách có ý nghĩa để xác định cái nào nên nhỏ hơn cái kia? – Galik