Sortieralgorithmus



  • Hallo liebe C++'ler,

    ich habe mir nun die letzten Tage schon einige Gedanken gemacht und mußte feststellen, daß Nachdenken ganz schön weh tun kann.
    Folgendes Problem...
    Über einen CAN-Adapter bekomme ich pro Sekunde die verschiedensten Datenarrays in den Rechner... das sind z.B. Identifier, Datenlänge und auch Datenfelder.
    Diese Daten werden zyklisch in einer TStringList erfasst, so daß ich diese z.B. in einer Datei speichern kann.
    Nun möchte ich aber gleichzeitig noch, die Daten in einer MemoBox ausgeben, jedoch nicht alles untereinander, sondern nach Identifiern sortiert. Sprich, jedes mal wenn ein Identifier auftaucht, der sich schon in der Memobox befindet, soll der alte an der gleichen Stelle überschrieben werden.
    Ich dachte mir, daß das ganze über ein Array für maximal 50 Identifier (das wäre eine Beschränkung) untereinander erfolgen sollte, doch irgendwie hab ich meine Probleme mit dieser Umsetzung.
    Ich bin nicht an die Memobox gebunden, wenn also wer einen anderen Vorschlag hat, dann wäre ich sehr dankbar.
    Bitte alle Ideen posten.

    Danke schon mal im Voraus,

    Holger



  • Ich würde da folgendes machen. Mach asu deinen daten eine struct und packe diese wiederum in eine map mit Identifier als index.

    struct data
    {
      int ident;
      string data1;
    ...
    };
    
    map<int,data> datamap;
    

    Da kannst du dann so zuweisen

    data test;
    // irgendwie füllen
    datamap[test.ident] = test;
    

    ident ist hier zwar doppelt drin, das macht aber meiner Meinung nach nichts. Man könnte es auch aus der Struktur entfernen.
    Wenn test.ident noch nicht existiert wird ein neuer Eintrag erzeugt, ansonsten der Alte überschrieben. Da eine map automatisch nach den Schlüsseln sortiert, bist du auch dieses Problem los. Du mußt dann die Einträge nur noch in dein Memofeld übertragen.


Log in to reply