Tôi đang cố gắng chỉ định loại tùy chỉnh làm khóa cho std :: map. Đây là loại mà tôi đang sử dụng làm khóa.Loại tùy chỉnh làm khóa cho bản đồ - C++
struct Foo
{
Foo(std::string s) : foo_value(s){}
bool operator<(const Foo& foo1) { return foo_value < foo1.foo_value; }
bool operator>(const Foo& foo1) { return foo_value > foo1.foo_value; }
std::string foo_value;
};
Khi sử dụng với std :: map, tôi nhận được lỗi sau.
error C2678: binary '<' : no operator found which takes a left-hand operand of type 'const Foo' (or there is no acceptable conversion) c:\program files\microsoft visual studio 8\vc\include\functional 143
Nếu tôi thay đổi cấu trúc như dưới đây, mọi thứ đã hoạt động.
struct Foo
{
Foo(std::string s) : foo_value(s) {}
friend bool operator<(const Foo& foo,const Foo& foo1) { return foo.foo_value < foo1.foo_value; }
friend bool operator>(const Foo& foo,const Foo& foo1) { return foo.foo_value > foo1.foo_value; }
std::string foo_value;
};
Không có gì thay đổi ngoại trừ việc quá tải nhà điều hành là bạn bè. Tôi tự hỏi tại sao mã đầu tiên của tôi không hoạt động?
Mọi suy nghĩ?
Cảm ơn. Điều đó đã làm các trick. –
Bạn có thể đi vào chi tiết hơn không? Tại sao bạn chỉ cần toán tử? –
bobobobo
vì bạn có thể lấy được toán tử> và toán tử == từ toán tử <. '(b b)', vì vậy có toán tử>. và, '(! (A skrebbel