Angenommen, ich möchte Objekte, die einen Server identifizieren, in eine stl set
einfügen. Dann würde ich dafür sorgen, dass ich auch umzusetzen operator<
für diese Objekte sonst würde ich in einen Compiler-Fehler führen:Wie platziert man Objekte, die in einem C++ std :: set nicht vergleichbar zu sein scheinen?
struct ServerID
{
std::string name; // name of the server
int port;
};
std::set<ServerID> servers; // compiler error, no operator< defined
Dies ist nur ein Beispiel für ein weit verbreitetes Problem ist, wo ich eine Aufgabe vergleichbar machen will.
Meine aktuelle Lösung geht in der Regel wie folgt aus:
bool operator< (const ServerID & lhs, const ServerID & rhs)
{
if (lhs.name != rhs.name)
{
return lhs.name < rhs.name;
}
else
{
return lhs.port < rhs.port;
}
}
Dies ist nur eine Lösung, die ich mir selbst gefunden. Aber ich vermute, dass dieses Problem auch in der Informatik erkannt wurde. Wenn ich Glück habe, gibt es dafür eine bessere Lösung. Kann mir jemand dazu sagen?
Warum haben Sie nicht einen int, um den Server mit einer ID-Nummer zu identifizieren? – Partial
Re: Allgemeinheit, denken Sie wahrscheinlich an 'Tupel', anonyme Strukturen, wo Elemente für den gleichen Effekt gemacht haben. Aber wie andere gesagt haben, mach dir keine Sorgen, denn eine völlig andere Art ist deine kanonische Lösung. –
JDonner