qsort bei strings?



  • Hallo,

    folgendes Problem ich möchte mit qsort einen String Array sortieren!

    int vergleich_wort (const void * a, const void * b) {
        return ((const std::string*)a)->compare(*(const std::string*)b);
    }             
    
    // im main teil
    
    qsort(iWoerter, temp, sizeof(string), vergleich_wort);
    

    Das Problem, das Programm srürzt ab. Warum geht das nicht? Was muss ich ändern? Am besten an einem Beispiel. Vielen Dank.



  • qsort solltest du nicht verwenden. Zum einen ist es umständlich und zum anderen geht es von bitweise kopierbaren Objekten aus. Diese Voraussetzung ist aber bei Klassen, zumal solchen mit explizit definiertem Kopierkonstruktor, nicht gegeben. Viel einfacher:

    #include <algorithm> // für sort
    using namespace std;
    ...
    sort(temp, temp + iWoerter);
    

    Das benutzt, wenn nichts anderes angegeben wird, automatisch den zu den übergebenen Datentypen passenden operator<.

    Guck dir mal die STL allgemein an, dann wirst du vielleicht auch darauf kommen, dass man sowas statt mit einem Array meistens besser mit einem Vektor macht:



  • hmm,

    also so geht das nicht wenn dann so

    sort (iWoerter, iWoerter + temp);

    Aber ist auch egal, weil wörter kann ich damit auch nicht sortieren! es müsste doch auch mit qsort gehen. mit vectoren möchte ich das erstmal nicht machen!



  • Erwin schrieb:

    also so geht das nicht wenn dann so

    sort (iWoerter, iWoerter + temp);

    Ich hatte gedacht iWoerter ist ein int. und hatte die Deklaration von qsort nicht mehr im Kopf. Wofür steht bei dir das i?

    Aber ist auch egal, weil wörter kann ich damit auch nicht sortieren!

    Warum nicht?

    es müsste doch auch mit qsort gehen.

    Wenn du meinst ... viel Erfolg!



  • ja das i steht schon für integer habe mich da verschrieben Woerter Array mit strings die sortiert werden sollen. Das muss doch gehen? Gut ok, mit qsort scheint es wirklich nicht so gut zu klappen aber wie kann ich es sonst sortieren?



  • Hmm, jetzt gehts doch mir sort. Danke!


Anmelden zum Antworten