Queue in veränderter Reihenfolge ausgeben



  • nein, aber du kannst den container sortieren lassen

    sortieren heisst ja nicht nur sortiert ausgeben lassen, sondern auch wirklich sortieren, sodass die reihenfolge der elemente geändert ist



  • Sarah83 schrieb:

    Dann werde ich die einzelnen Elemente also vor dem Einlesen umsortieren müssen, ja? 😕

    Oder du nutzt einen vollwertigen Container ( std::vector , std::list oder std::deque ).



  • Sarah83 schrieb:

    Es geht um eine Liste von Städtenamen die umsortiert werden soll... Ist nur eine Übrung für ein Uniseminar die ich mir selber ausgedacht habe.

    Dann werde ich die einzelnen Elemente also vor dem Einlesen umsortieren müssen, ja? 😕

    Eventuell wäre auch eine priority_queue für dich geeignet.



  • Danke für die vielen Antworten 🙂

    Sollte auf jeden Fall ein Queue sein. Ich gucke mir dann mal den priority Queue an. 🤡



  • Sarah83 schrieb:

    Sollte auf jeden Fall ein Queue sein.

    Warum ist dir denn dieser Punkt so wichtig? Die Möglichkeiten einer Queue sind beschränkt (neues Element einfügen, ältestes Element herausholen), damit wirst du deine Sortierung nicht hinbekommen.



  • Eine std::deque kann alles was auch std::queue kann und noch viel mehr, da std::queue lediglich ein Adapter davon ist, was CStoll bereits gesagt hat.



  • Weil ich eigentlich eine Übung mit Queues machen wollte...
    Aber welcher Container bietet sich für mein Vorhaben denn besonders an?



  • Nimm so viel wie möglich std::vector !



  • Queue ist kein Container 😉 Oder meinst du eigentlich deque?

    Ansonsten: Die sequentiellen Container (vector/deque/list) kannst du vor der Ausgabe sortieren, die assoziativen Container (set/map) sind bereits von sich aus sortiert. Und priority_queue liefert dir auf Anfrage das "größte" Element zurück (wobei du selber definieren kannst, was als "größtes Element" gilt).



  • Sarah83 schrieb:

    Aber welcher Container bietet sich für mein Vorhaben denn besonders an?

    Wenn das "verdrehte" Ausgeben die einzige Anforderung ist, dann ein std::vector .
    Wenn du zusätzlich etwas Queue-artiges brauchst (z.B: push_back() + pop_front() ), dann std::deque .

    Wobei, machen kannst du das mit jedem Container, auch mit einer reinen Liste oder Queue. Du müsstest dazu ja bloss die ersten 7 Elemente rausholen und zwischenspeichern (reicht auch Iteratoren auf die ersten 7 Elemente zwischenzuspeicher), diese dann "verdreht" rum ausgeben, und den Rest dann ganz normal durchlaufen.



  • Ah super. Das klingt beides gut.
    Ich habe mir vorgestellt die ersten 7 Einträge einfach mit einer Gewichtung zu versehen. Das ist dann ja quasi genau das was für priority_queue nötig ist, oder?



  • Ich wüsste nicht wozu man hier eine Priority-Queue einsetzen sollte.



  • Eine Queue ist ein Ding, wo sich immer hinten welche anstellen, und vorne welche raus gehen können. Der, der sich zuerst angestellt hat, darf auch zuerst wieder raus.
    Bei einer priorisierbaren Queue haben bestimmte sich Anstellende Sonderausweise, mit denen sie sich verdrängeln dürfen. Trotzdem müssen sie immer vorne raus.
    Du willst etwas haben, wo sich mitten drin Leute bewegen können. Die sollen auch raus gehen dürfen. Das geht aber in einer Queue nicht. Ergo hat eine Queue keinen Sinn.


Anmelden zum Antworten