std::sort mit structure geht nicht, qsort soll man nicht - wie dann?
-
Hallo,
ich versuche ein array mit einer eigens definierten structure zu sortieren,
mit std::sort kann ich nicht und qsort sollte man nicht verwenden....kann mir jemand helfen?Mein versuch:
qsort( (void *) myarr, myarr_elements, sizeof(MM_DATA), &MyClass::Compare); //die Compare int MyClass::Compare(const void *a, const void *b) { MM_DATA *ma,*mb; ma = (MM_DATA *) a; mb = (MM_DATA *) b; if (ma->i < mb->i) return(-1); if ((ma->i == mb->i) && (ma->j < mb->j)) return(-1); if ((ma->i == mb->i) && (ma->j == mb->j)) return(0); return(1); } //meine MM_DATA struktur: struct MM_DATA { int i; int j; double val; };Als Fehlermeldung bekomme ich so:
Fehler: »int (MyClass::)(const void, const void*)« kann nicht nach »int ()(const void, const void*)« für Argument »4« nach »void qsort(void*, size_t, size_t, int ()(const void, const void*))« umgewandelt werden
Danke euch
-
Erstens: Was meinst du mit "std::sort() kann ich nicht verwenden"? Ist es verboten für die Anwendung oder kommst du damit nicht zurecht?
Zweitens: Die Vergleichsfunktion für qsort() muß eine globale Funktion oder statische Methode sein, bei einer normalen Methode gibt es Probleme, den this-Zeiger zuzuordnen.
-
zu std::sort()
ich kann doch std::sort() nicht mit einem structure - gefüllten elemente aufrufen...bei mir kommt als fehler:
Fehler: keine passende Funktion für Aufruf von »sort(MM_DATA*&, int&)«
-
Wie hast du denn sort() aufgerufen? Richtig wäre:
MM_DATA mein_array[len]; sort(mein_array,mein_array+len);//erwartet, die Elemente per (überladenen) op< vergleichen zu können sort(mein_array,mein_array+len,comparer);//erwartet, daß comparer() mit zwei MM_DATA's aufgerufen werden kann //und etwas bool'sches zurückliefert - also bool comparer(const MM_DATA&,const MM_DATA&); - als globale Funktion