Operator überladeung <<



  • Hallo ich schaffe es nicht mein eigene Map auszugeben ....
    ich versuche mich an dem << operator um eben iter.first und iter.second ausgeben zu können...könnte mir jemand schnell auf die sprünge helfen?
    sortiert soll es so sein: alle a's sind kleiner sind sind vorne. und als nächste priorität dann erst all b's die klein sind sind vorne....d.H: 0,1 ; 0,2; 1,3; 1,5; 5,0; 5,1...

    struct MyMap
    {
        int a;
        int b;
        double c;
    
        bool operator<<(const RCV& rhs) const 
        { 
            if(a == rhs.a)
                return b < rhs.b;   
            return a < rhs.a;
        } 
    };
    
    typedef std::map<int, std::vector<myStruct> > MyMap;
    

    danke euch vielmals 🙂



  • scheisse...hier noch mal ein korrekter Code:

    struct MyStruct
    {
        int a;
        int b;
        double c;
    
        bool operator<<(const myStruct& rhs) const 
        { 
            if(a == rhs.a)
                return b < rhs.b;   
            return a < rhs.a;
        } 
    };
    
    typedef std::map<int, std::vector<myStruct> > MyMap;
    


  • warum operator<<? eher operator<



  • ja sorry...hab mich da vertippt...aber das Problem ist bestehend auch mit '<'
    😞



  • Sollte das hier

    if(a == rhs.a)
    

    nicht so heißen

    if(a >= rhs.a)
    


  • Braunstein schrieb:

    Sollte das hier

    if(a == rhs.a)
    

    nicht so heißen

    if(a >= rhs.a)
    

    Dann wäre (5;2) < (2;3) und (2;3) < (5;2) 😉



  • Gupferl schrieb:

    ich versuche mich an dem << operator um eben iter.first und iter.second ausgeben zu können.

    Wenn du einen Operator meinst, um damit etwas z.B. mit cout ausgeben zu können: Der muss so aussehen:

    std::ostream& operator<<(std::ostream&, AuszugebenderTyp)

    Der auszugebende Typ für iter.second ist std::vector<myStruct>. Für iter.first brauchst du keinen Operator, für int gibt's den schon.

    sortiert soll es so sein: alle a's sind kleiner sind sind vorne. und als nächste priorität dann erst all b's die klein sind sind vorne....d.H: 0,1 ; 0,2; 1,3; 1,5; 5,0; 5,1

    Dir ist aber schon klar, dass eine Map nach dem Schlüssel sortiert wird? Und der Schlüssel ist bei dir int, nicht myStruct.



  • MFK schrieb:

    std::ostream& operator<<(std::ostream&, AuszugebenderTyp)

    Der auszugebende Typ für iter.second ist std::vector<myStruct>. Für iter.first brauchst du keinen Operator, für int gibt's den schon.

    Und dieser operator<<() sollte in der Regel ein friend deiner Klasse sein.

    Greetz, Swordfish


Anmelden zum Antworten