Wie kann ich die überlastung der Vergleichsoperator für eine Menge von Paaren?
Wie kann ich die überlastung und pass ein <
(weniger als) Komparator, um eine Menge von Paaren von ganzen zahlen? Dies ist mein Aktueller code:
class A{
public:
typedef std::pair<int, int> pair_type;
bool operator<(const pair_type& a, const pair_type& b){
if (a.first < b.first) return true;
else if ( (a.first == b.first) && (a.second < b.second) ) return true;
else return false;
}
private:
std::set< pair_type > edge_;
};
Wenn ich versuche, um diesen code zu kompilieren, dann bekomme ich die folgende Fehlermeldung:
error: 'bool A::operator<(const pair_type&, const pair_type&)' must take exactly one argument
Wie kann ich es beheben?
std::pair
hat bereits eine entsprechende operator<.InformationsquelleAutor Pippi | 2013-02-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
InformationsquelleAutor smossen
Sollten Sie definining der operator überladen als Schüler (mit einem einzelnen parameter, in der Regel eine andere Instanz der gleichen Klasse):
Ah, danke, du hast Recht. Ich muss zugeben, um mit Hilfe der member-Funktion version mehr oft, aber es macht Sinn, die friend-Funktion, wie nachfolgend im detail hier link
InformationsquelleAutor Derek
Ihren Netzbetreiber frei sein sollte-Funktion (nicht-Mitglied-Funktion), da es hat keine Beziehungen zu
A
Klasse.InformationsquelleAutor ForEveR
Seit C++11, Sie können auch eine lambda-Ausdruck statt der Festlegung eines Komparators struct:
Ich auch verdichtet Ihre Komparator-code speichern, um zwei Linien. Nun können Sie definieren wie folgt festgelegt:
Jedoch, wenn Sie wollen, um die oben genannten Komparator für ein set, das ist eine Klasse, dann ist es ein bisschen weniger komfortabel, weil Sie passieren müssen der Komparator auch den Konstruktor set, wie oben gezeigt.
Das bedeutet, dass Sie mit der hand über den Komparator in der Initialisierungsliste des Konstruktors definition:
Code auf Ideone
InformationsquelleAutor honk