Gibts so eine einfache Hashtable in C++ wie in Java



  • Hi Leute,

    ich möchte meine Daten in einer Hashtable speichern. In Java geht es ganz einfach: Objekt erstellen, put für Table füllen, get fürs Holen, Daten-Objects und Key-Objects. Alles easy...

    Aber in C++ kann man die Daten nicht so einfach auslesen, oder ich finde die Möglichkeit nicht. Ich habe es nur über der IDictionaryEnumerator geschafft und damit muss ich die ganze Liste durchgehen, um um gewünschen Element zu kommen.

    Gibt es da eine einfachere Möglichkeit?

    Ciao

    Sebastian



  • Klassen:
    Dictionary
    Hashtable
    KeyedCollection

    einfach über den subscript operator ansprechen...



  • hm, ich habe noch gar nichts mit Scripting gemacht und kenne mich da auch überhaupt nicht aus. 😕

    Kannst du mir vielleicht einen kurzen Quellcode posten, damit ich einen Anhaltspunkt habe?

    Oder weiß jemand was von Maps? Kann man damit auch eine Art Hashtable machen?

    Danke



  • Der Subscript-Operator hat nichts mit Scripting zu tun. Stattdessen bezeichnet man so die eckigen Klammern, mit denen man den Index eines Arrays angibt. Das "Subscript" ist also "der Index" oder "die Indizierung", wenn wir von C++ sprechen.

    Auf gut deutsch:
    Mittels Table[KeyObjekt] kannst du auf einen Wert zugreifen oder diesen setzen, ähnlich der std::map.



  • Ah, cool! Wieder was gelernt.

    Ich kann also auf meine Hashtable mit den eckigen Klammern zugreifen?



  • Das war der Inhalt der ersten Antwort, ja 🙂



  • Waaaahh, geht nicht. Was mache ich falsch?

    Hashtable __gc *myHT = new Hashtable();
    myHT->Add(S"000", S"delete");
    myHT->Add(S"001", S"connect");
    myHT->Add(S"010", S"halt");
    myHT["010"];
    


  • So geht es:

    System::Collections::Hashtable *ht = new System::Collections::Hashtable();
      ht->Add(S"key", S"value");
      System::String *str = static_cast<System::String*> (ht->Item[S"key"]);
    

    Wenn Du aber eh nur mit Strings arbeiten willst, dann nimm

    System::Collections::Specialized::StringDictionary *sd = new System::Collections::Specialized::StringDictionary();
      sd->Add(S"key", S"value");
      System::String *str2 = sd->Item[S"key"];
    


  • Hey, cool!!!

    Es geeeehhht.

    Danke für die Hilfe. Aber echt schade, dass das ganze in MSDN nicht so gut erklärt ist.


Anmelden zum Antworten