Chương trình sau không biên dịch. Nhưng nếu tôi không bình luận ra operator==
, nó sẽ biên dịch. Tại sao operator==
vẫn cần thiết khi tôi đã cung cấp FooEqual
Không thể so sánh tiêu chuẩn :: unorded_set với tùy chỉnh KeyEqual
#include <cstddef>
#include <unordered_set>
struct Foo {
};
struct FooHasher {
size_t operator()(const Foo&) const {
return 1;
}
};
struct FooEqual {
bool operator()(const Foo& lhs, const Foo& rhs) const {
return true;
}
};
// bool operator==(const Foo& lhs, const Foo& rhs) {
// return true;
// }
int main() {
std::unordered_set<Foo, FooHasher, FooEqual> s1;
std::unordered_set<Foo, FooHasher, FooEqual> s2;
(void)(s1 == s2);
return 0;
}
Phải là lỗi trong quá trình triển khai ... trừ khi thông số nói rằng 'KeqEqual' chỉ được sử dụng để chèn/tra cứu và' std :: unordered_set :: operator == 'kiểm tra xem hai tập hợp có bằng nhau hay không các yếu tố cá nhân so sánh bằng nhau? Có thể cần một luật sư ngôn ngữ C++ ở đây. – dreamlax