Assioziative Arrays



  • Ich meine Arrays, die nicht einfach mit einer Zahl durchnummeriert werden, sondern bestimmte Array Felder bestimmte Werte haben.

    array[abc] = "cba";
    
    Label1->Caption = array[abc];
    

    Mit einem indikativen Array sähe das so aus:

    array[0] = "cba";
    
    Label1->Caption = array[0];
    

    Der Vorteil des assioziativen liegt darin, dass man anders darauf zugreifen kann

    Label1->Caption = array[Edit1->Text]
    

    Da müsste man dann ins Editfeld "abc" eingeben.
    So etwas ginge mit einem indikativen Array nicht.

    mfg
    Jakel



  • std::map



  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • solche assoziativen arrays gibt es nicht wirklich. das sind nie arrays sondern irgendwelche tricks mit maps usw.



  • hardware schrieb:

    solche assoziativen arrays gibt es nicht wirklich. das sind nie arrays sondern irgendwelche tricks mit maps usw.

    😕
    Was gibt's denn ´daran "nicht wirklich" ?

    Gruß,

    Simon2.



  • der grinch schrieb:

    std::map

    was?



  • Hmm
    Header: <map>
    Klasse: std::map
    Beispiel:

    std::map<std::string, unsigned int> data;
    data["abc"] = 10;
    data["def"] = data["abc"] + 1;
    data["ghi"] = 12;
    if (data.find("abc") != data.end()) std::cout << "Map contains \"abc\"!" << std::endl;
    

    ...



  • Ich weiss jetzt nicht, ob die STL da was bietet, aber man kann sich mit memcmp() ne Liste bauen, die einen Eintrag nach dem Wert sucht, nicht nach der Index-Nummer... ist das das was du suchst? (scheiss Satz :P)
    rya.



  • Scorcher24 schrieb:

    Ich weiss jetzt nicht, ob die STL da was bietet, ......

    Was schon ein wenig erstaunlich ist, nachdem im gesamten Thread bereits darauf hingewiesen wurde. 😉

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Was gibt's denn ´daran "nicht wirklich" ?

    Es sind keine Arrays sondern Bäume, zumindest was die Schlüssel betrifft.



  • Simon2 schrieb:

    Scorcher24 schrieb:

    Ich weiss jetzt nicht, ob die STL da was bietet, ......

    Was schon ein wenig erstaunlich ist, nachdem im gesamten Thread bereits darauf hingewiesen wurde. 😉

    Gruß,

    Simon2.

    Man kann ja nicht alles kennen und (D)Evil hat gepostet während ich am tippen war :P. Maps hab ich noch nie gebraucht ;).
    rya



  • ~john schrieb:

    Simon2 schrieb:

    Was gibt's denn ´daran "nicht wirklich" ?

    Es sind keine Arrays sondern Bäume, zumindest was die Schlüssel betrifft.

    Also mir klang es nicht danach, als ob dem Threadersteller dieser (nur im technischen Hintergrund verborgene) Unterschied wichtig wäre.

    Gruß,

    Simon2.



  • Scorcher24 schrieb:

    ...Man kann ja nicht alles kennen und (D)Evil hat gepostet während ich am tippen war :P. Maps hab ich noch nie gebraucht ;).
    rya

    😮
    Finde ich aber abgefahren, weil die STL-Container die Teile sind, die ich am praktischsten finde (und am meisten vermisse, wenn ich in C programmieren muss).
    Da sieht man mal, wie unterschiedlich Programmierer ein und dieselbe Sprache wahrnehmen können....

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Also mir klang es nicht danach, als ob dem Threadersteller dieser (nur im technischen Hintergrund verborgene) Unterschied wichtig wäre.

    Es war auch mehr als Warnhinweis zu deuten, denn assoziative Container verhalten sich beim Einfügen, Löschen und Lesen nicht wirklich wie ein Array, und das könnte irgend wann von Interesse sein.



  • Du könntest dir auch ne entsprechende Klasse bauen (Den Index-Operator überladen). Vielleicht wäre das am besten, du könntest eben nach Belieben anpassen...

    MfG



  • 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



  • 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...


Anmelden zum Antworten