std::sort
-
ich habs nun so:
int Bank::compare(const Konto* k1, const Konto* k2) { if(k1->getKontonummer() < k2->getKontonummer()) return 1; return k1->getKontonummer() != k2->getKontonummer(); } void Bank::sortieren_nach_Kontonummern() { KontenVec::iterator toFind; toFind = konten.begin(); std::sort(konten.begin(), konten.end(), compare); }
ich bekomm eine komisch compiler meldung:
bank.cpp(243) : error C2664: 'void __cdecl std::sort(class Konto ** ,class Konto ** ,int (__thiscall *)(const class Konto *,const class Konto *))' : Konvertierung des Paramet ers 3 von 'int (const class Konto *,const class Konto *)' in 'int (__thiscall *)(const class Konto *,const class Konto *)' nicht moeglich Keine Funktion mit diesem Namen im Gueltigkeitsbereich stimmt mit dem Zieltyp ueberein
was da los????
-
du musst Bank::compare machen.
-
sort(konten.begin(), konten.end(),Bank::compare);
funzt a net...gleich meldung kommt!
-
Mach mal statt diesen Zeigern bei der Übergabe Referenzen.
MfG SideWinder
-
Muss die Vergleichsfunktion nicht static sein?
-
Glaube schon... oder halt ein Funktionsobjekt.
-
Wenns nen Member ist musse static sein.
Ich versteh allerdings nicht, warum er das nich einfach über den op< implementiert.
-
Weil man manchmal auch nach was anderem sortieren möchte:
Konten können nach Name oder nach id sortiert werden... oder vielleicht auch nach dem was gerade drauf ist. Welche Sortierung sollte jetzt der op< implementieren?
-
Nach Kontonummern. Das will er doch machen, wie man an seinen Beispielen sieht.
Die lassen sich doch super vergleichen.Oder hab ich es nicht verstanden ?
-
Ja schon, aber da steht nicht, daß er nicht auch mal nach Namen sortieren will. Und wenn er das will, dann ist ein statischer Member angebrachter als der op<.
Ich wollte ja auch nur ein Beispiel bringen, warum es manchmal sinnvoll ist nicht den op< zu verwenden, sondern ne Vergleicherfunktion.
-
Achso, ok dann hab ich dich missverstanden.
Letztendlich muss er ja jeden Vergleich irgendwie so deixeln, dass er auf < abgebildet wird.
-
Wenn der op< schon als Nicht-Member deklariert werden soll dann auch die cmp_kontnr.
Sonst kann ich die dummerweise wieder nicht als Prädikat übergeben weil sie nur einen Parameter hat ;), und wenn etwas binäres als Member in einer Klasse ebenfalls 2 Parameter hat dann ist static die gerechte Bestrafung *g*
MfG SideWinder