Benutzerdefinierte Typen als Schlüssel für eine Karte - C ++

Ich versuche weisen Sie einen benutzerdefinierten Typ als Schlüssel für std::map. Hier ist die Art, die ich benutze als Schlüssel.

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;
};

Wenn verwendet mit std::mapich erhalte die folgende Fehlermeldung.

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

Wenn ich die Struktur wie die unten, hat alles geklappt.

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;
};

Nichts geändert, außer die Herstellung der operator-überladungen als Freund. Ich Frage mich, warum meine erste code nicht funktioniert?

Irgendwelche Gedanken?

InformationsquelleAutor der Frage Navaneeth K N | 2009-05-25

Schreibe einen Kommentar