Vector Sortieren



  • Hallo!

    Scheinbar stehe ich im moment irgendwie auf der leitung.
    Ich habe eine Vektor den ich sortieren möchte. Hier mal der code:

    // < Operator der Klasse ISceneNode
    std::vector<ISceneNode*> m_children;
    bool operator < (ISceneNode &f) { printf("Called..."); return this->m_distanceToRef >= f.m_distanceToRef; };
    ...
    std::vector<ISceneNode*>::iterator st = m_children.begin();
    std::vector<ISceneNode*>::iterator ed = m_children.end();
    std::sort(*st, *ed);
    

    Das Problem ist, das nicht sortiert wird (also es wird nie der Text "Called..." ausgegeben).
    Ich mache etwas ähnliches mit einer anderen Klasse und dort funktioniert es problemlos.
    Woran könnte der Fehler liegen?
    Grüße,



  • Du darfst den Iterator von end() nicht dereferenzieren, das ist undefiniertes Verhalten.

    machs so:

    bool operator<( ISceneNode* lhs, ISceneNode* rhs )
    {
      return *lhs < *rhs;
    }
    
    std::sort( st, ed );
    


  • Du solltest vielleicht die Iteratoren nicht dereferenzieren und denn <-Operator ordentlich (für den richtigen Typ und mit der richtigen Signatur) definieren. (Kriegst du das so durch den Compiler durch???)

    bool operator< (const ISceneNode& lhs, const ISceneNode& rhs)
    {
        return lhs->m_distanceToRef < rhs->m_distanceToRef;
    }
    
    bool operator< (const ISceneNode*& lhs, const ISceneNode*& lhs)
    {
        return *lhs < *rhs;
    }
    
    // ...
    
    std::sort (m_children.begin (), m_children.end ());
    


  • danke für die lösungen. funkt jetzt einwandfrei.


Anmelden zum Antworten