我想分配一個自定義類型作爲std :: map的鍵。這是我用作鑰匙的類型。自定義類型作爲鍵的映射 - 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;
};
當的std ::地圖,我收到以下錯誤使用。
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
如果我改變像下面的結構,一切正常。除了使操作符重載爲朋友
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;
};
沒有改變。我想知道爲什麼我的第一個代碼不工作?
有什麼想法?
謝謝。那就是訣竅。 – 2009-05-25 11:02:36
你可以進入更多的細節?爲什麼你只需要operator <而不是operator ==或operator>? – bobobobo 2009-12-06 18:38:24
,因爲您可以從操作符<中派生運算符>和運算符==。 '(b b)',所以有operator>。 (!(a skrebbel 2010-08-23 08:39:42