Kann man Elemente von vector<XYZ> sortieren???



  • du schreibst eine Vergleichsfunktion und übergibst sie an sort:

    bool compare(XYZ const& a, XYZ const& b)
    {
      return a.Z < b.Z;
    }
    ...
    sort(v.begin(), v.end(), compare);
    


  • Muss ich dann für compare einen Funktionspointer setzen?



  • Was soll das sein, einen Funktionspointer setzen? Das geht so, wie ichs geschrieben habe.



  • Hallo,

    ich krieg folgende Fehlermeldung:
    Konvertierung des Parameters 3 von 'bool (class Point3D &,class Point3D &)' in 'bool (__thiscall *)(class Point3D &,class Point3D &)' nicht moeglich

    #include "Block.h"
    #include "Point3D.h"
    
    //////////////////////////////////////////////////////////////////////////////
    // Sort 
    // 
    
    void
    Block
    ::sortZ(const LTDouble& a_dTileSizeX, const LTDouble &a_dTileSizeY)
    {
    	sort(m_vLaserPoints.begin(),m_vLaserPoints.end(),compare);
    }
    
    //////////////////////////////////////////////////////////////////////////////
    // Compare Z-Coordinates
    // 
    
    bool
    Block
    ::compare(Point3D& t_rPoint1,Point3D& t_rPoint2)
    {
    	return t_rPoint1.getZ() < t_rPoint2.getZ();
    }
    


  • die Vergleichsfunktion darf keine nicht-statische Memberfunktion sein.



  • wenn ich's so schreib

    bool 
    Block 
    ::compare(const Point3D& t_rPoint1,const Point3D& t_rPoint2) 
    { 
        return t_rPoint1.getZ() < t_rPoint2.getZ(); 
    }
    

    krieg ich auch ne Fehlermeldung.



  • Das ist ja auch immer noch eine nicht-statische Memberfunktion. Entweder du machst sie zu einer statischen Memberfunktion, oder du nimmst sie aus der Klasse heraus. So geht es jedenfalls nicht.



  • Sorry, aber ich hab echt keine Ahnung, wie ich eine statische Memberfunktion machen soll 😕

    Darf bool compare() nicht zu einer Klasse gehören???



  • Darf bool compare() nicht zu einer Klasse gehören???

    Entweder das, oder du schreibst vor den Funktionsprototyp ein static, um sie statisch zu machen.

    MfG MAV



  • Das gehört aber zum Grundwissen. Naja was solls: Eine statische Memberfunktion deklarierst du mit dem Schlüsselwort static:

    class Foo {
    public:
      static void blub();
    };
    

    Das bedeutet, dass man diese Funktion einfach so aufrufen kann Foo::blub(), ohne eine Instanz, auf der sie als Methode aufgerufen wird (obwohl Foo f; f.blub(); auch erlaubt ist, aber nicht mehr tut als der vorherige Aufruf). Man spricht auch von Klassenmethoden im Gegensatz zu Instanzmethoden.
    Technisch gesehen sind statische Memberfunktionen fast das gleiche wie freie Funktionen, nur dass sie halt in Klassen stehen und damit den Sichtbarkeitsregeln unterliegen ... sie können selbst private, protected oder public sein, und dürfen auf die privaten Member ihrer Klasse und die protected Member der Überklassen zugreifen.


Anmelden zum Antworten