liste sortieren



  • ich habe eine folgede struktur:

    typedef double data_type; // nur mal so als beispiel :)
    typedef struct{
      unsigned int handle;
      float depth;
      data_type data;
    } node;
    

    diese struktur enthällt einmal meine daten (data), einen handle über welchen ich auf das ganze zugreifen will und einen tiefenwert (depth) nach welchem ich das ganze sortieren muss, da ich die daten in aufsteigender reihenfolge des depth wertes benötige. Am ende gibt sind es mehrere tausend instanzen dieser struktur, welche ich sortiert brauche.

    Das problem ist nun, dass ich für den zugriff über den handle logischerweise eine map benutzen würde, aber gleichzeitig eine liste brauche, welche ich schön sortieren kann.

    hat jemand eine idee, wie ich das machen kann?
    Ich sehe nämlich keine möglichkeit denn entweder ist es nicht sortiert oder der handle-zugriff ist langsam.


  • Mod

    Du machst eine Liste mit (nicht besitzenden) Zeigern auf deine Objekte und sortierst die Zeiger nach einem Kriterium deiner Wahl. Du kannst auch deine map und diese Liste zusammen in eine gemeinsame Containerklasse packen, die dann sowohl map-artigen Zugriff als auch Zugriffe über eine sortierte Liste erlaubt.



  • Ist das ganze statisch oder dynamisch, also werden Daten gelöscht oder kommen neue dazu?

    Inwiefern macht "unsigned int handle;" Sinn? Warum nicht einen festen Ort im Speicher garantieren und einen Pointer herausgeben?



  • die idee mit zwei verschiedenen listen/maps ist super 🙂
    warum handles? es wir eine art resourcemanager für eine 2d engine, der zugriff über handles und über pointer ermöglicht (am besten nicht weiter nacjfragen, das macht schon sinn in meinem fall 😃 ).
    statisch oder dynamisch? halb, halb. es werden sehr oft elemente gelöscht und hinzugefügt, diese werden allerdings nicht in der liste geändert, sodass ich nicht immer überprüfen und neu sortieren muss.



  • P.S.: Der typedef struct Trick ist in C++ nicht nötig, hier braucht man keine elaborated type specifiers.



  • P.S.: Der typedef struct Trick ist in C++ nicht nötig, hier braucht man keine elaborated type specifiers.

    das hat mich sowieso immer verwirrt, ich habe das mir angewöhnt, nachdem ich die headerdateien von directx durchgeguckt habe...


Log in to reply