Brauche Hilfe zu map<>
-
Hallo,
kann mir jemand mal bitte verraten wie ich eine ganz einfache map erstellen kann?
Ich habe folgendes Problem:
in der Map sollen folgende Einträge sein:
1. Key = unsigned
2. Data = unsigned[3] .. also ein Feld mit genau 3 Einträgenwie muss ich die map definieren?
so funkts auf jedenfall nichttypedef map<unsigned, unsigned[3] > id_edgesIDMapType;
also wie kriege ich da das Feld rein?
Danke schonmal für die Antworten...
Grüße,
Tugi2o
-
naja
also ein Feld mit genau 3 Einträgen
du kannst dein Array typisieren ...
der einfache unelegantere weg ...struct 3dData { unsigned int data[3]; }; typedef std::map<unsigned int,3dData> MapT;
Du kannst deine Daten selber dynamisch anlegen und nur die zeiger in der map halten .... (pfui !);
typedef std::map<unsigned int,unsigned int *> MapT; // und irgendwo im quellcode MapT myMap; unsigned int myindex = 5; unsigned int pdata = new unsigned int[3]; myMap.insert(MapT::value_type(myindex ,pdata ));
die perfekteste Loesung ist, du schaust dir an was dein unsigned int [3] denn ueberhaupt ist und machst ne klasse draus, mit allem was man brauchen keonnte CCtor, Zuweisungsop ... [] operatoren etc ... wenns geht noch als template. C++ (map) mit C-arrays zu verwenden ist auch irgendwie unelegant :p zumindest kapseln sollte man sie.
Ciao ...
-
Vielen Dank für die schnelle Antwort, ich werde es sofort einbauen
Grüßle,
Tugi2o
-
Geht nicht, weil Arrays ein Bisschen eigenartig sind (konkret: nicht kopier- und zuweisbar). Du musst das Array entweder in ein struct verpacken oder direkt einen Array-Wrapper wie boost::array von http://www.boost.org verwenden.
-
hab mal eben was zusammengeschrieben, hoffe, es fehlt nix
template<class Type,int Amount> class array{ private: Type array[Amount]; public: Type& operator[](int Offset){ return array[Offset]; } Type operator[](int Offset)const{ return array[Offset]; } Type* operator+(int Offset){ return array+Offset; } Type* operator-(int Offset){ return array-Offset; } Type* operator->(){ return array; } Type& operator*(){ return *array; } };
-
Nein, ich kann sowas machen:
int feld[50]; int * zeiger = feld+20; diff_t distanz = zeiger - feld; // !!!
Dein Feld kann das nicht.
Außerdem hat operator void bereits eine durlich bessere Alternative vorgeschlagen. Dein Ansatz bringt nichts neues sinnvolles.