Sortieren, etwas selbst basteln oder fertige Klasse nehmen?



  • Hallo,

    Da ich leider nichts passendes mit der Suchfunktion gefunden habe das meine Frage beanworten könnte habe ich diesen Thread erstellt.

    Ist es richtig das diese Klasse aus der Standardbibilothek nur auf klassen Elemente anwendbar ist?

    void std::sort<int>(_RanIt,_RanIt)
    

    weil ich wollte das gerade auf ein array anwenden, leider zeigt es diesen Fehler an.

    wenn ihr mir sagt das es nicht geht, werd ich mir eine Unterfunktion dafür schreiben, es geht mir nur darum soviel wie möglich aus der std:: zu benutzen.

    vielen dank im voraus
    mfg fraggelfragger



  • #include <algorithm>
    
    int main()
    {
        unsigned int array[150] = {};
        // fill with data!
    
        std::sort(array, array + 150);
    }
    

    ... fertig! 😉



  • Erstens ist sort() keine Klasse, sondern eine (Template)Funktion - und zweitens ist sie für alle Containertypen geeignet, die einen passenden Iterator verwenden (bei nackten Arrays kannst du dafür Zeiger nehmen) - solange die Datenelemente verglichen werden können.

    Sprich - wenn du in der Lage bist, MeinTyp x,y;x<y; zu schreiben*, kannst du den Typ auch sortieren:

    MeinTyp daten[laenge];
    //fülle das Array
    std::sort(daten,date+laenge);
    

    Wenn trotzdem etwas nicht klappt, zeig mal deinen Code - inklusive der Fehlermeldungen.

    * ich weiß, der Code ist nutzlos - aber es geht um die Frage, ob der Compiler ihn schluckt



  • Wenn trotzdem etwas nicht klappt, zeig mal deinen Code - inklusive der Fehlermeldungen.

    Klappt noch immer nicht, es ist vllt. etwas problematischer weil ich einen 4x6 array habe.

    schauts euch an:

    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    #include <algorithm>
    #include <vector> 
    
    const int DIM4 = 4;
    const int DIM6 = 6;
    
    using namespace std;
    
    int main()
    {
    // 4x6 Array deklarieren
    int Lottotips[DIM4][DIM6];
    
    //6 Pseudo-Zufallszahl erzeugen // a + rand()& (b-a +1) 
    //a = untere Grenze = 1 // b = obere Grenze = 49
    
    //Startwert (Seed) von rand wird auf aktuelle Zeit gesetzt
    srand((int)(time(0)));
    
    bool doppelte_zahl;
    
    for (int zeile=0;zeile<DIM4; zeile++)
    	{
    		for (int spalte=0;spalte< DIM6; spalte++)
    		{
    			do
    				{
    					doppelte_zahl = false;
    					Lottotips[zeile][spalte]= 1+ rand()% 49;
    
    					for (int suche=0;suche < spalte; suche++)
    						doppelte_zahl = doppelte_zahl || (Lottotips[zeile][suche] == Lottotips[zeile][spalte]);
    
    				}while (doppelte_zahl);
    
    			cout << Lottotips[zeile][spalte] << ' ';
    		}
    			cout << endl;
    	}
    
    cout << endl;
    
    //Sortieren der Zahlen pro Zeile
    std::sort(Lottotips ,Lottotips + 5); //Anfang: Lottotips[0][0] , Ende: Lottotips[0][5]
    
    cin.get();
    return 0;
    }
    

    Fehlermeldungen:

    c:\programme\microsoft visual studio 8\vc\include\algorithm(2976) : error C2075: '_Val': für die Initialisierung eines Arrays sind geschweifte Klammern erforderlich
    c:\programme\microsoft visual studio 8\vc\include\algorithm(2997): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template "void std::_Insertion_sort1<_BidIt,int[6]>(_BidIt,_BidIt,_Ty (*))".
    c:\programme\microsoft visual studio 8\vc\include\algorithm(2981) : error C2106: '=': Linker Operand muss ein L-Wert sein
    c:\programme\microsoft visual studio 8\vc\include\algorithm(2988) : error C2106: '=': Linker Operand muss ein L-Wert sein
    c:\programme\microsoft visual studio 8\vc\include\algorithm(2989) : error C2106: '=': Linker Operand muss ein L-Wert sein
    


  • std::sort(Lottotips[0], Lottotips[0] + DIM6);
    


  • (D)Evil schrieb:

    std::sort(Lottotips[0], Lottotips[0] + DIM6);
    

    Und da kommt die Antwort blitzschnell 🙂

    vielen dank euch beiden jetzt klapppt es

    mfg fraggelfragger


Anmelden zum Antworten