Assioziative Arrays



  • Also so gut kenn ich mich mit c++ nich aus, ich kannte das nur aus php und dachte es gäbe sowas vielleicht auch in c++.

    Ich glaub ich mach das einfach irgendwie anders, die Vorschläge hier sind mir zu kompliziert 😮



  • Jakel schrieb:

    Ich glaub ich mach das einfach irgendwie anders, die Vorschläge hier sind mir zu kompliziert 😮

    Was ist ein einer std::map kompliziert?

    #include <string>
    #include <map>
    
    int main () {
      std::map<std::string, int> karte;
    
      karte["eins"] = 1;
      karte["zwei"] = 2;
    }
    

    P.S. Arrays kennt PHP gar nicht, das wird auch so in der Doku beschrieben. Es gibt nur Maps, die man blödsinnigerweise als Arrays bezeichnet. Wenn man nur wenige Dinge in eine Map ablegt mag das kein Problem sein. Aber in C++ ist oftmals Geschwindigkeit ein Thema. Und es besteht ein nicht unerheblicher Unterschied ob man O(1) oder O(log n) für den Zugriff auf eine Element benötigt.



  • Zu dem mit PHP:
    Das is mir neu, aber man lernt ja nie aus^^

    Zum Code:
    Also so versteh ichs jetzt auch, aber das erste Beispiel (von wem auch immer) war irgendwie komplizierter.



  • In dem Borland C++ Builder funktioniert das aber nicht, deswegen hatte ich das hier ja auch eigentlich ins vcl Forum geschrieben...



  • Don06 schrieb:

    Also um einen Standard-Container an Schnelligkeit und Sicherheit zu übertreffen muss man sich schon anstrengen ;).
    Wenn dir in einer std::map die Zugriffszeit von O(log n) zu langsam ist, kannst du ja ne Hash-Map nehmen. Die gibts im TR1. Wenn dein Compiler das unterstützt, findest du std::tr1::unordered_map in <unordered_map>. Wenn alles klappt hast du da konstante Zugriffszeit, fast so wie in einem Array :xmas2:
    Gruß
    Don06

    Was ist mit std::hash_map?



  • Das ist höchstens eine Erweiterung, gehört auf jeden Fall nicht zum Standard.



  • std::hash_map ist eine Microsoft-Erweiterung. Leider unterstützt auch der neue C++-Kompiler von Microsoft (2008) imho nicht den TR1, also muss man da auf Erweiterungen setzen. Wird hoffentlich nachgebessert.

    Gruß
    Don06



  • Hallo

    Jakel schrieb:

    In dem Borland C++ Builder funktioniert das aber nicht, deswegen hatte ich das hier ja auch eigentlich ins vcl Forum geschrieben...

    Ich weiß ja nicht welchen Code, welche BCB-Version du benutzt oder w3as genau du unter "funktioniert nicht" meinst, aber auf meinem alten BCB5 funktioniert std::map mit dem gezeigten Code selbstverständlich korrekt.

    bis bald
    akari



  • Don06 schrieb:

    std::hash_map ist eine Microsoft-Erweiterung.

    heißt die nicht stdext::hash_map?



  • Don06 schrieb:

    std::hash_map ist eine Microsoft-Erweiterung. Leider unterstützt auch der neue C++-Kompiler von Microsoft (2008) imho nicht den TR1, also muss man da auf Erweiterungen setzen. Wird hoffentlich nachgebessert.

    Gruß
    Don06

    TR1 unterstützung wurde zumindest für VC++9 (VS2008) angekündigt. Vorallem das dies auch mitgeliefert werden soll. Im letzten Download bei meiner MSDN Subscription war es aber nicht enthalten, daher bin ich da echt noch gespannt.

    BR
    Vinzenz


Anmelden zum Antworten