std::map in mfcliste



  • Hallo

    Hallo,

    std::map zeigt mir alle Elemente immer alphabetisch sortiert.

    Da habe ich versucht mit insert und pair die Folge zu bestimmen,
    das funktionierte nicht, wie kann die map so erzeugt werden, das insert
    auch die Folge bestimmt ?

    typedef std::map<std::string, Property*> CPropArray;
    
    CPropArray properties_;
    
    properties_[pszName] = pProp;
    //properties_.insert(properties_.end(),std::make_pair(pszName, pProp));
    //properties_.emplace_hint(properties_.begin(),pszName, pProp);
    

    Vielen Dank für Hinweise,
    ja ich weiß das Netz ist voll damit, bin auch kein Freund von templates.

    Grüße aus Berlin
    Karsten



  • Achromat schrieb:

    wie kann die map so erzeugt werden, das insert
    auch die Folge bestimmt ?

    Gar nicht.
    Also klar, du kannst als map-Key nen Integer verwenden den du dann hochzählst. Dann kannst du aber vermutlich gleich vector<Property*> statt dessen nehmen.

    Einen Container der Lookup über einen Key kann (und da dann auch Uniqueness garantiert), aber nach einem anderen, benutzerdefinierten Kriterium sortiert ist, gibt es in der Standard-Library meines Wissens nicht.

    Achromat schrieb:

    Vielen Dank für Hinweise,
    ja ich weiß das Netz ist voll damit, bin auch kein Freund von templates.

    Das einzige was mir hier (abgesehen von selbst stricken) einfällt, ist Boost.Multiindex.
    Damit könntest du z.B. einen "map und list" Container basteln. Dabei würden die Items dann jeweils nur einfach gespeichert, aber eben mehrfach "indiziert". Eben einmal als Map (-> Lookup mit Key) und einmal als List (insert Reihenfolge).

    Wenn du aber kein Freund von Templates bist, dann ist das nix für dich.

    Und da du ja sowieso nur nen sparsamen Property* als "Wert" hast, kannst du auch gleich zwei Container verwenden: std::map<std::string, Property*> für Lookup und std::vector<Property*> für die Reihenfolge. Das einzig lästige dabei ist das Pflegen bei insert/erase. In einfachen Fällen wo man bloss 1x am Stück alles aufbaut und dann nimmer ändert ist das aber kein Ding.



  • Hi Baer,

    vielen Dank für deine Ausführung, na muss ich mal schauen, der index ist
    ein Text, man könne natürlich eine enumerierung vor dem string setzen,
    aber das ist dann auch nicht meine weise ..
    Das ganze ist im sog. µManager begraben.

    Werde ich halt nen 3 teiliges map [][][] ansteuern, mal sehen ob ich damit durchkomme. Also listen und vectors nutze ich sehr gerne.
    Bei der map jedoch werde ich schon benommen, und weitere versülzungen
    bringen ein undurchschaubaren Quadawelch zu Stande.

    Danke für deinen Hinweis, werde ich mal erforschen.

    Grüße vom Fort Hahneberg
    Karsten