Sortieren aufsteigend



  • @zalo3 sagte in Sortieren aufsteigend:

    Was sagt ihr dazu?

    Alles wegschmeißen, dann lernen, wie std::vector funktioniert und schließlich den gesamten operator+= durch folgenden Einzeiler (!) ersetzen:

       // angenommen, v ist der std::vector<CalendarEntry> und entry der Eintrag:
       v.insert(std::lower_bound(v.begin(), v.end(), entry), entry);
    

    (wahlweise auch upper_bound, je nachdem, wie du gleiche Daten einsortieren willst)



  • @wob

    Ja wie sieht dann die logik bei diesem vector aus ?
    Ich möchte gerne es mit vector machen .
    Für was steht vbegin usw?



  • Siehe https://en.cppreference.com/w/cpp/container/vector/begin

    Und schau dir allgemein https://en.cppreference.com/w/cpp/container/vector an - da sind auch immer Beispiele mit dabei! Die Funktionen push_back, operator[] und size sind wohl die wichtigsten. Dann schlag auch insert nach. Und dann guck dir die Beispiele zu std::lower_bound an.

    Du wirst nicht darum rumkommen, die entweder einen anständigen Lehrer zuzulegen oder ein ordentliche Lehrmaterialien zu besorgen. Empfehlenswerte Bücher: "C++ Primer" oder "Der C++-Programmierer". Tipp: Bibliothek (sofern es da die Bücher in der aktuellen Auflage gibt) Meide Bücher, die versprechen, C++ in kurzer Zeit zu lehren und meide Bücher von Jürgen Wolf.



  • @zalo3 sagte in Sortieren aufsteigend:

    Ja wie sieht dann die logik bei diesem vector aus ?

    "insert" fügt ein Element an einer bestimmten Stelle ein. DIese Stelle wird mit "lower_bound" ermittelt. Um die Speicherverwaltung kümmert sich der vector dann alleine.

    v.begin() ist ein Iterator auf den Anfang des std::vector, v.end() ein Iterator auf die Stelle hinter dem letzten Element.

    Wenn das hier aber wirklich Hausaufgaben oder sowas in der Art sind, wirst du das aber möglicherweise nicht mit std::vector lösen dürfen, so sinnvoll das auch wäre.



  • @daddy_felix sagte in Sortieren aufsteigend:

    "insert" fügt ein Element an einer bestimmten Stelle ein.

    Nicht nur eins, sondern sogar mehrere Elemente! und das mit maximal einer memory allocation. Ich sehe leider viel zu häufig, dass auf std::copy zurück gegriffen wird, statt dass insert verwendet wird.



  • ne ist keine hausaufgabe . Nur freies lernen.

    Aber es ist glaub ich sogut wie unmöglich selber drauf zu kommen



  • @zalo3 sagte in Sortieren aufsteigend:

    Aber es ist glaub ich sogut wie unmöglich selber drauf zu kommen

    @wob sagte in Sortieren aufsteigend:

    Du wirst nicht darum rumkommen, die entweder einen anständigen Lehrer zuzulegen oder ein ordentliche Lehrmaterialien zu besorgen.


  • Mod

    Möchte nicht irgendjemand mal erwähnen, dass eine geordnete Menge von Objekten in ein (multi-)set gehört, nicht in einen vector/array? Die beiden Stärken des Vectors/Arrays (Indexzugriff, schnelle Iteration) werden hier überhaupt nicht benutzt. Stattdessen werden hier umständlich der sequentiellen Datenstruktur Eigenschaften aufgepfropft, die das set inhärent mitbringt. Die nächste Frage nach der Lösung dieses Threads wird doch offensichtlich sein, wie man nun einen weiteren Termin hinzufügt. Soll man da nach jedem Zufügen neu sortieren? Oder selber die richtige Position suchen und mitten drin einfügen (was ein vector gar nicht gut verträgt!)? Das set macht das alles automatisch.


Anmelden zum Antworten