Probleme mit Tree, der Pointer auf eine Map enthalten soll



  • Hallo Forenuser,

    ich habe ein kleines Problem mit der tree.hh und einer Map

    Ausgehend von einem Anfangszustand habe ich Übergänge zu anderen Zuständen, welche mit einer gewissen Wahrscheinlichkeit verbunden sind.

    Für die Speicherung der Zustände mit den zugehörigen Wahrscheinlichkeiten habe ich eine Map ausgesucht, bei der die Zustände als Schlüssel und die Wahrscheinlichkeiten als Wert dazu genutzt werden.

    Immer wenn ein Übergang nun geschieht und ein neuer Wert in die Map eingefügt wird, soll in dem Tree - ausgehend vom ursprünglichen Zustand - ein Knoten eingefügt werden, der einen Zeiger auf den entsprechenden Eintrag in der Map enthält. Leider komme ich mit diesem Pointer nicht ganz zurecht. Kann mir jemand helfen, wie der Befehl aussehen müsste, den ich mit der letzten Anweisung bewirken möchte?

    std::map<int, std::map<std::vector<double>, double> > TransitionMulti;
    tree< std::map<int, std::map<std::vector<double>, double> >* > traceTree;
    tree< std::map<int, std::map<std::vector<double>, double> >* >::iterator top = traceTree.begin(), one, two, three, four;
    
    TransitionMulti[0].insert( pair<std::vector<double> ,double>(state, 1) ); //the first state is inserted with the initial value 1
    one = traceTree.insert(top, TransitionMulti[0][state]*); //pointer to the first entry of the traceTree
    

    leider spuckt der mir eine Fehlermeldung für den letzten Befehl aus, kann mir jemand sagen, wie ich



  • TransitionMulti[0][state] müsste funktionieren. Ansonsten *(TransitionMulti[0][state]) ausprobieren.



  • beides funktioniert nicht, in dem zweiten Fall gibt es aus:
    invalid type argument of unary "*"

    in dem TransitionMulti[k][state] Fall heißt es:
    no matching function for call "tree..."



  • Schau dir mal typedef an, um räum deinen Quellcode mal auf...

    Und ich glaube, dass die Funktion make_pair und nicht pair heißt.



  • typedef std::map<std::vector<double>, double> vectorMap;
        typedef std::map<int, vectorMap > vectorStepMap;
    
        vectorStepMap TransitionMulti;
        tree< vectorStepMap* > traceTree;
        tree< vectorStepMap* >::iterator top = traceTree.begin(), one, two, three, four;
    
        TransitionMulti[0].insert( make_pair<std::vector<double> ,double>(state, 1) );
        traceTree.insert(top, vectorStepMap* );
    

    gut... jetzt ist mein Problem aber noch immer nicht gelöst...



  • Vielleicht traceTree.insert(top, &vectorStepMap );



  • hilft leider auch nicht...



  • hilft tree< vectorStepMap & > traceTree; ?



  • hilft leider auch nicht...

    edit: hab es raus: Ich habe mit dem Pointer auf die komplette Datenstruktur gezeigt, wollte aber nur auf einzelne Paare verweisen...

    Code sieht jetzt wie folgt aus und funktioniert auch, Kommentare müssen aber noch abgeändert werden:
    [code]
    //vectorMap and vectorStepMap are initialized
    typedef std::map<std::vector<double>, double> vectorMap;
    typedef std::map<int, vectorMap > vectorStepMap;

    //Map for storage of the coefficients k_1,...,k_4 and additionally the [0] row contains the beginning state
    vectorStepMap TransitionMulti;
    TransitionMulti[0].insert( make_pair<std::vector<double> ,double>(state, 1) );

    vectorMap::iterator iteratorTransitionMulti = TransitionMulti[0].begin();
    double statePointer;
    tree< double
    > traceTree;
    tree< double* >::iterator top = traceTree.begin(), one, two, three, four;

    //initial probability is added to the traceTree
    one = traceTree.insert(top, &iteratorTransitionMulti->second );
    [\code]


Log in to reply