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ägen

    wie muss ich die map definieren?
    so funkts auf jedenfall nicht 😞

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


Anmelden zum Antworten