RadStudio unordered_map



  • @Gestalt sagte in RadStudio unordered_map:

    Nicht sortiert bedeutet doch eigentlich unberührt es wird so übernommen wie eingetragen

    Nein. Verbreiteter Aberglaube.



  • @Gestalt Du könntest einen std::vector nehmen, wenn die Reihenfolge erhalten bleiben soll.



  • @Wutz
    In einen Projekt bei der Firma, für die gerade tätig bin, hat man mal von langer Zeit (Visual Studio 6) aus der Mfc irgendeine Container Klasse benutzt. Diese hatte damals die Eigenschaft, die Einträge in umgekehrter Richtung zu speichern, was aber nicht so dokumentiert war. Als man dann auf VS 2017 umstieg, funktioniere diese Ausgabe nicht mehr so.



  • @Burkhi Ja, da bleibt einem nix anderes übrig, das läuft zuverlässig in Verbindung mit find ist das auffinden des Keys dann wie in in einer map.



  • @Burkhi ja ich hatte die unordered_map auch anders in Erinnerung aber mit den neuen Compilern fällt das normale verhalten sehr schnell auf eben ungeordnet. Ich hatte vor paar Jahren andere Ergebnisse als ich diese heute bekomme.



  • Du könntest auch parallel eine map führen, falls du die schnelleren key zugriffe brauchst, die dann als value den index im vector beinhaltet.
    Wenn du die Liste viel modifizierst würde ich das kapseln, sonst wirds vermutlich schnell buggy.



  • @Wutz sagte in RadStudio unordered_map:

    @Gestalt sagte in RadStudio unordered_map:

    Nicht sortiert bedeutet doch eigentlich unberührt es wird so übernommen wie eingetragen

    Nein. Verbreiteter Aberglaube.

    Ja, offensichtlich.



  • @5cript genauso mache ich es schon die ganze Zeit, da läuft auch nichts bei schief, habe ich mir selber ausgedacht (Vector und parallel dazu map), krass das diese Variante empfohlen wird. :). Durch eine Programmänderung ist mir dann das Problem mit der unordered_map erst aufgefallen, vorher hat es keine Rolle gespielt wie da was sortiert war.



  • Man kann für solche Dinge auch Boost.Multiindex verwenden: https://www.boost.org/doc/libs/1_73_0/libs/multi_index/doc/index.html



  • @Gestalt sagte in RadStudio unordered_map:

    @5cript genauso mache ich es schon die ganze Zeit, da läuft auch nichts bei schief, habe ich mir selber ausgedacht (Vector und parallel dazu map), krass das diese Variante empfohlen wird. :). Durch eine Programmänderung ist mir dann das Problem mit der unordered_map erst aufgefallen, vorher hat es keine Rolle gespielt wie da was sortiert war.

    Die Kombination aus mehreren Containern ist gar nicht selten. Ganz oft habe ich z.b. Anwendungsfälle bei denen ich Objekte in mehreren Containern lageren muss ( als Shared_ptr ) um auf verschiedenste Arten effizient drauf zugreifen zu können.

    std::vector<std::shared_ptr<T>> ZugriffPerIndex;
    std::unordered_map<std::string, std::shared_ptr<T>> ZugriffPerKey;
    

    Wobei man auch gut überlegen muss, ob sich eine Map lohnt. Bei wenigen Elementen ist eine manuelle Suche im vector deutlich schneller als die Suche in einer Map mittels find.

    Ich habe mir mal als ungefähre Grenze mal irgendwann 100 als Orientierung gesetzt. Ich glaube aber gelesen zu haben, dass die Grenze sogar noch höher liegt.


Log in to reply