Zu den Aufzeichnungen der tutorials.de-Live-Workshops
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
596
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    HPB HPB ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Beiträge
    187
    Hallo,
    wie definiere ich den operator[], wenn ich eine map aus eigenen Datentypen habe?
    PHP-Code:
    struct Key
    {
      
    Key(int key) : i(key){};
      
    inline bool operator<(const Keyother) const {return iother.i;}
      
    int i;
      
    //...
    };
    struct Value
    {
      
    Value(int value) : i(value){};
      
    int i;
      
    //...
    };

    typedef map<KeyValueComplexMap;

    void test()
    {
      
    ComplexMap cm;
      
    cm.insert(make_pair(Key(1),Value(2))); // so geht's
      
    Key k(2);
      
    Value v(4711);
      
    cm[k]=v// so geht's nicht. Wie definiere ich den Klammer-Operator?

    Irgendwie steht ich grad etwas auf'm Schlauch?
    Kann mir jemand helfen?

    Gruß,
    Peter
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    7.983
    Hi.
    Zitat Zitat von HPB Beitrag anzeigen
    Hallo,
    wie definiere ich den operator[], wenn ich eine map aus eigenen Datentypen habe?
    Das brauchst du nicht und das würde auch gar nicht gehen. std::map besitzt bereits einen operator[]. Poste lieber mal die Fehlermeldung.

    Gruß

    \edit: Elemente die in einem STL Kontainer gespeichert werden benötigen einen Standardkonstruktor.
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    HPB HPB ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Beiträge
    187
    Danke, da hast du natürlich recht!

    Die Fehlermeldung lautet:
    error C2676: binary '[' : 'myClass' does not define this operator or a conversion to a type acceptable to the predefined operator
    und myClass ist eine recht komplexe Klasse. Ich dachte es mit diesem einfachen Beispiel nachstellen zu können

    Zudem ist mir noch ein Unterschied aufgefallen:
    meine map hat als Schlüssel keine Objekte sondern Pointer auf Objekte.

    Mit meinem einfachen Bsp funktioniert es aber dennoch mit dem default-Ctor
    PHP-Code:
    struct ValueInternals
    {
      
    int i;
      
    int j;
    };

    struct Key
    {
      
    Key(int key) : i(key){};
      
    inline bool operator<(const Keyother) const {return iother.i;}
      
    int i;
      
    };
    struct Value
    {
      
    Value(){};
      
    Value(int value) : i(value){};
      
    int i;
      
    ValueInternals j;
      
    //...
    };

    typedef map<Key*, ValueComplexMap;

    void test()
    {
      
    ComplexMap cm;
      
    cm.insert(make_pair(&Key(1),Value(2))); // so geht's
      
    Key k(2);
      
    Value v(4711);
      
    cm[&k]=v// so geht's nicht. Wie definiere ich den Klammer-Operator?

    Was will mit also die obige Fehlermeldung sagen? Ich versteh's nicht
     

  4. #4
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.098
    Moin,

    wenn ich das richtig sehe, hast Du die MAP mit zwei Structs definiert
    typedef map<Key*, Value> ComplexMap;
    Du versucht dann aber, sie mit einzelnen Werten zu benutzen
    Key k(2);
    Value v(4711);
    cm[&k]=v;
    Du musst dann an beiden Stellen auch schon structs verwenden !


    EDIT: Sorry, da war ich zu schnell - das ist hier Blödsinn - vergiss es
    Aber Deine Structs sehen sehr seltsam aus, oder ?

    Gruß
    Klaus
    Geändert von vfl_freak (08.05.09 um 12:24 Uhr) Grund: EDIT
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  5. #5
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    7.983
    Zitat Zitat von HPB Beitrag anzeigen
    Danke, da hast du natürlich recht!

    Die Fehlermeldung lautet:
    error C2676: binary '[' : 'myClass' does not define this operator or a conversion to a type acceptable to the predefined operator
    Was ist denn myClass? Es scheint das es nicht dein Map-Typ ist. Warum versuchst du auf deine eigene Klasse den operator[] anzuwenden?

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  6. #6
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.098
    Aber folgendes mache ich an vielen Stellen und es fuktioniert wunderbar:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    struct MY_STRUCT
    {
        long KeyValue;
        char cValue[10];
        ...
    };
     
    map<long,MY_STRUCT> mTempMap;
    ...
    // Füllen von MY_STRUCT
    ...
    mTempMap[MY_STRUCT.KeyValue] = MY_STRUCT;

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

Ähnliche Themen

  1. Frage zum &-Operator
    Von Cyraid im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 15.06.10, 23:09
  2. VB 08 / Operator Mid
    Von Xebino im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 14.10.09, 09:23
  3. TI89 - operator definieren
    Von cycovery im Forum Sonstige Sprachen
    Antworten: 0
    Letzter Beitrag: 10.11.08, 10:34
  4. Like Operator
    Von Arijane im Forum .NET Windows Forms
    Antworten: 4
    Letzter Beitrag: 22.06.08, 10:16
  5. [c++] << und >> Operator
    Von FireFlow im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 26.12.04, 11:44