operator[] definieren

HPB

Erfahrenes Mitglied
Hallo,
wie definiere ich den operator[], wenn ich eine map aus eigenen Datentypen habe?
PHP:
struct Key
{
  Key(int key) : i(key){};
  inline bool operator<(const Key& other) const {return i< other.i;}
  int i;
  //...
};
struct Value
{
  Value(int value) : i(value){};
  int i;
  //...
};

typedef map<Key, Value> ComplexMap;

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
 
Hi.
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.
 
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:
struct ValueInternals
{
  int i;
  int j;
};

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

typedef map<Key*, Value> ComplexMap;

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 :(
 
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
 
Zuletzt bearbeitet:
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ß
 
Aber folgendes mache ich an vielen Stellen und es fuktioniert wunderbar:

Code:
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
 
Zurück