[C++/STL] Sortierkriterium der map Klasse

Von: , Frage gestellt am So, 13. Mai 2001

Ich verwende die map Klasse um ein Konfigurationsfile zu lesen und zu schreiben.
Um sicher zu gehen das aM das gleiche wie Am ist, verwende ich eigene Sortierkriterien. (http://developer.rothmichael.de/c/nocase_compare.html)
Es funktioniert ja auch ganz gut. Aber: Die map klasse sortiert von Natur aus.
Gibt es eine Möglichkeit der klasse map zu verbieten die Elemente beim einfügen zu sortieren ?
Ich brauche genau die reihenfolge die ich beim einfügen verwende. Es muß auch sichergestellt sein, das
map.find() AM findet wenn nur am in map->first() steht.

2 Antworten zu dieser Frage

  1. Antwort von nach einer Stunde 0 hilfreich
    Re: [C++/STL] Sortierkriterium der map Klasse

    Hi Michael :)

    Die map der STL baut einen binären Suchbaum auf. Meistens sogar einen Rot-Schwarz-Baum, um eine Entartung des Baumes zur linearen Liste zu vermeiden. Beim Einfügen wird daher immer geordnet eingefügt, sonst würde die Suchbaum-Eigenschaft (links < rechts) verloren gehen. Gibt es eine Möglichkeit der klasse map zu verbieten die
    Elemente beim einfügen zu sortieren ?
    Mit einer Map geht es nicht. Wie wäre es, wenn du die Daten als Menge ablegst? Oder als pair<> in einer Liste? Ich brauche genau die reihenfolge die ich beim einfügen
    verwende.
    Dann nimm einen Vector von pair<>s :)))

    cu Stefan.

    • Antwort von nach 2 Stunden 0 hilfreich
      Re^2: [C++/STL] Sortierkriterium der map Klasse

      Mit einer Map geht es nicht. Wie wäre es, wenn du die Daten
      als Menge ablegst? Oder als pair<> in einer Liste?
      Hm, gefällt mir gut die Idee. Soweit bin ich denke ich noch nicht. Muß erst mal etwas mehr erfahrung sammeln :-)

      Momentan mache ich folgendes:
      typedef map<basic_string<T>,basic_string<T>,NoCase_Compare<basic_string<T>,T> > MapKey;
      typedef map<basic_string<T>,MapKey*,NoCase_Compare<basic_string<T>,T> > Ini;
      Ini * ini;



      Das konstrukt wird mir noch etwas zu kompliziert:
      typedef list<pair<basic_string<T>,basic_string<T> > > MapKey;
      typedef list<pair<basic_string<T>,MapKey*> > Ini;
      Ini * ini;


      Ich muß mir erst mal gedanken machen wie ich in diesem fall in einer Liste suche etc.
      Aber es ist die Lösung für das Problem ;-) Ich brauche genau die reihenfolge die ich beim einfügen
      verwende.
      Dann nimm einen Vector von pair<>s :)))
      Vectoren...
      Werd ich mir auch mal ansehen. Mal schaun was besser ist - listen oder Vectoren ?
      Hmm... hab doch erst angefangen mit STL ;-))))

      TNX


      Micha

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!