Duplikate entfernen, operator < überladen
-
Ich will mit folgendem Code Duplikate entfernen:
template<typename T> void removeDuplicates(std::vector<T>& vec) { std::sort(vec.begin(), vec.end()); vec.erase(std::unique(vec.begin(), vec.end()), vec.end()); }Wie muss ich dafür meine Klasse, die einen double[3] kapselt, den Operator < (odr <=?) überladen, damit die lexikographische Ordnung genommen wird?=
-
-
krümelkacker schrieb:
Sorry, ich dachte, es ging um das, was std::unique braucht, um Duplikate rauszuschmeißen. std::sort wäre mit einem entsprechenden operator< zufrieden.
Du gehst einfach der Reihe nach vom ersten bis zum letzten Element und vergleichst die so lange, bis eines größer oder kleiner ist.
ungetesteter Pseudocode
bool operator<(dings const& a, dings const& b) { for (int k=0; k<3; ++k) { if (a.array[k] != b.array[k]) return a.array[k] < b.array[k]; } return false; }
-
Aber das gibt's auch schon fertig:
http://www.cplusplus.com/reference/algorithm/lexicographical_compare/#include <algorithm> #include <functional> ... struct my_order : std::binary_function<dings,dings,bool> { bool operator()(dings const& a, dings const& b) const { return std::lexicographical_compare( a.array,a.array+3, b.array,b.array+3 ); } }(ungetestet)
-
krümelkacker schrieb:
krümelkacker schrieb:
Sorry, ich dachte, es ging um das, was std::unique braucht, um Duplikate rauszuschmeißen. std::sort wäre mit einem entsprechenden operator< zufrieden.
Du gehst einfach der Reihe nach vom ersten bis zum letzten Element und vergleichst die so lange, bis eines größer oder kleiner ist.
ungetesteter Pseudocode
bool operator<(dings const& a, dings const& b) { for (int k=0; k<3; ++k) { if (a.array[k] != b.array[k]) return a.array[k] < b.array[k]; } return false; }Danke, aber da kommt die Meldung
Fehler 1 error C2804: Binärer Operator '<' hat zu viele Parameter
-
sdfsdf schrieb:
Danke, aber da kommt die Meldung
Fehler 1 error C2804: Binärer Operator '<' hat zu viele ParameterDas hast Du das, was als freie Funktion gedacht war, wahrscheinlich als Elementfunktion ("Methode") benutzen wollen.
-
krümelkacker schrieb:
sdfsdf schrieb:
Danke, aber da kommt die Meldung
Fehler 1 error C2804: Binärer Operator '<' hat zu viele ParameterDas hast Du das, was als freie Funktion gedacht war, wahrscheinlich als Elementfunktion ("Methode") benutzen wollen.
Danke!
-
ssdfdsf schrieb:
krümelkacker schrieb:
Das hast Du das, was als freie Funktion gedacht war, wahrscheinlich als Elementfunktion ("Methode") benutzen wollen.
Danke!
Siehe dazu auch den entsprechenden Artikel im Magazin
