ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
403
403
EMPFEHLEN
-
Hallo zusammen,
ich habe eine Klasse auf der ich den "<"-Operator definiert habe mit dessen Hilfe ich eine Ordnung spezifiziere, so dass ich einfach per:
set<Klassename> MeineSet;
eine Set erzeugen kann,
Jetzt brauche ich aber noch eine zweite Set in der ich die Objekte nach einer anderen Ordnung sortiere, kann mir jemand helfen und sagen wie ich die zweite Set definiere, so dass Sie nicht mit dem < Operator sortiert, sondern einem anderen benutzt.
Dank im voraus
mxm
-
Hallo,
eigtl. gibt es doch nur 2 Ordnungen oder? Also aufsteigend und absteigend, wobei erstere durch operator< und zweitere durch operator> implementiert werden könnte.
D.h. willst du das operator< für deinen Typ aufgerufen wird schreibst du std::set<Foo, lesser<Foo> >, wobei der lesser Comparator auch nich angegeben werden muss (da lesser default ist), oder wenn du willst das operator> für deinen Typ aufgerufen wird schreibst du std::set<Foo, greater<Foo> >.
Wenn du dennoch einen eigenen Comparator definieren willst schau mal da:
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
#include <iostream> #include <iterator> #include <set> class Foo { private: int elem; public: Foo(int elem) : elem(elem) {} bool operator<(const Foo& toCompare) const { return toCompare.elem > elem; } bool operator>(const Foo& toCompare) const { return toCompare.elem < elem; } friend std::ostream& operator<<(std::ostream &cout, const Foo& toPrint) { cout << toPrint.elem; return cout; } int getElem() const { return elem; } }; struct FooComparator { bool operator()(const Foo& toCompare1, const Foo& toCompare2) { return toCompare1.getElem() > toCompare2.getElem(); } }; int main(){ Foo a[] = { Foo(1), Foo(10), Foo(3), Foo(14), Foo(-10)}; //operator< of Foo will be called std::set<Foo> ofs1(a, a + 5); //operator> of Foo will be called // set<OrderedFoo, greater<Foo> > ofs2(a, a + 5); //operator() of FooComparator will be called std::set<Foo, FooComparator> ofs2(a, a + 5); //output content of ofs copy(ofs1.begin(), ofs1.end(), std::ostream_iterator<Foo>(std::cout, "\n")); std::cout << "---" << std::endl; copy(ofs2.begin(), ofs2.end(), std::ostream_iterator<Foo>(std::cout, "\n")); }
Siehe auch:
http://www.sgi.com/tech/stl/set.html
Gruß,
RedWing"I'm not deaf, I'm ignoring you"
----
Ähnliche Themen
-
Problem mit eigener Klasse und Objekten dieser Klasse
Von Eroli im Forum C/C++Antworten: 15Letzter Beitrag: 10.06.10, 17:48 -
settimeout in eigener klasse auf eine Methode der Klasse
Von user2580 im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 12.04.09, 16:26 -
Eclipse GMF in eigener Applikation nutzen?
Von Woggly im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 10.06.08, 20:28 -
Probleme mit eigener Klasse
Von Rene42 im Forum .NET CaféAntworten: 3Letzter Beitrag: 16.02.07, 09:25 -
Suche SChreibschrift der Ersten und Zweiten Klasse
Von Jan-Frederik Stieler im Forum TypografieAntworten: 4Letzter Beitrag: 22.09.04, 23:10





Zitieren
Login






