tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
403
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    mxm mxm ist offline Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    16
    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
     

  2. #2
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    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

  1. Antworten: 15
    Letzter Beitrag: 10.06.10, 17:48
  2. settimeout in eigener klasse auf eine Methode der Klasse
    Von user2580 im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 12.04.09, 16:26
  3. Eclipse GMF in eigener Applikation nutzen?
    Von Woggly im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 10.06.08, 20:28
  4. Probleme mit eigener Klasse
    Von Rene42 im Forum .NET Café
    Antworten: 3
    Letzter Beitrag: 16.02.07, 09:25
  5. Suche SChreibschrift der Ersten und Zweiten Klasse
    Von Jan-Frederik Stieler im Forum Typografie
    Antworten: 4
    Letzter Beitrag: 22.09.04, 23:10