Problem mit map



  • Ich habe ein kleines Problem mit meiner Map, die ich in der Header-Datei deklariert habe:

    typedef std::map<int,double> levelMap;

    In einer Funktion in meiner cc-Datei übergebe ich die map wiefolgt:

    double SnrEval::addNoiseLevel(double mTime, levelMap addMap, AirFrame* frame)
    {

    levelMap::const_reverse_iterator iter;

    ....

    Kann ich den Iterator derart implementieren???

    Danke Tronador



  • ja



  • templäd schrieb:

    ja

    Danke.

    Wie sähe das Einfügen eines neuen Elementes in die Map aus?

    MfG Tronador



  • Erstmal als Tip:

    // addMap als Referenze definieren! 
    double SnrEval::addNoiseLevel(double mTime, levelMap &addMap, AirFrame* frame) 
    { 
    ...
    

    Sonst wird jedes mal deine levelMap samt Inhalt kopiert, und das einfügen eines neuen Elements würde sich auf deine ursprünglich übergebene Map nicht auswirken (sondern nur in der Kopie). Willst du bestimmt nicht, oder? Falls doch, vergiss, was ich gesagt habe. 😉

    Einfügen geht ganz einfach:

    addMap.insert( std::pair<int,double>(100, 1.0) );
    // oder
    addMap[100] = 1.0;
    


  • Danke, nur leider bekomme ich vom Compiler den Fehler:errorC2601 syntax error 'identifier'.

    MfG Tronador



  • Code zum Fehler? Zeile + Umgebung?

    MfG SideWinder



  • Artchi schrieb:

    addMap.insert( std::pair<int,double>(100, 1.0) );
    

    besser

    addMap.insert(std::make_pair(100, 1.0));
    


  • Der Fehler taucht in einer weiteren Funktion in der Header-Datei auf. Aber die Fragestellung wäre die Gleich wie zuvor.

    void addNewMessage(AirFrame* frame, levelMap &addMap);

    MfG Tronador



  • So, habe das obige Problem gelöst, nur leider sitze ich am Nächsten:

    double SnrEval::addNoiseLevel(double mTime,const levelMap &addMap, AirFrame* frame)
    {
        levelMap::const_iterator iter;
    
        double timer = 0.0;
        double sumNoiseLevel = 0.0;
    
        for(timer=0.0; timer<=timer + simTime(); timer++){
          for( iter = addMap.begin()->first;iter != addMap.end()->first;iter++){
          	EV << (*iter).first << " => " << (*iter).second << endl;
          	if(timer=mTime){
    		//addition
    		   sumNoiseLevel += defaultChannel.noiseLevel;
    	}
      }	
     }
    
    EV << " sumNoiseLevel: "<< sumNoiseLevel<<endl;
    
    return sumNoiseLevel;
    }
    

    SnrEval.cc(436) : error C2679: binary '=' : no operator found which takes a righ
    t-hand operand of type 'const double' (or there is no acceptable conversion)
    C:\Programme\Microsoft Visual Studio 8\VC\INCLUDE\xtree(405): could be '
    std::_Tree<_Traits>::const_iterator &std::_Tree<_Traits>::const_iterator::operat
    or =(const std::_Tree<_Traits>::const_iterator &)'
    with
    [
    _Traits=std::_Tmap_traits<double,double,std::less<double>,std::alloc
    ator<std::pair<const double,double>>,false>
    ]
    while trying to match the argument list '(std::_Tree<_Traits>::const_ite
    rator, const double)'
    with
    [
    _Traits=std::_Tmap_traits<double,double,std::less<double>,std::alloc
    ator<std::pair<const double,double>>,false>
    ]
    SnrEval.cc(436) : error C2678: binary '!=' : no operator found which takes a lef
    t-hand operand of type 'std::_Tree<_Traits>::const_iterator' (or there is no acc
    eptable conversion)
    with
    [
    _Traits=std::_Tmap_traits<double,double,std::less<double>,std::alloc
    ator<std::pair<const double,double>>,false>
    ]
    C:\Programme\Microsoft Platform SDK\Include\guiddef.h(197): could be 'in
    t operator !=(const GUID &,const GUID &)'
    C:\Programme\Microsoft Visual Studio 8\VC\INCLUDE\xtree(303): or 'bool s
    td::_Tree<_Traits>::const_iterator::operator !=(const std::_Tree<_Traits>::const
    _iterator &) const'
    with
    [
    _Traits=std::_Tmap_traits<double,double,std::less<double>,std::alloc
    ator<std::pair<const double,double>>,false>
    ]
    while trying to match the argument list '(std::_Tree<_Traits>::const_ite
    rator, const double)'
    with
    [
    _Traits=std::_Tmap_traits<double,double,std::less<double>,std::alloc
    ator<std::pair<const double,double>>,false>
    ]
    NMAKE : fatal error U1077: '"C:\Programme\Microsoft Visual Studio 8\VC\BIN\cl.ex
    e"' : return code '0x2'
    Stop.
    NMAKE : fatal error U1077: 'cd' : return code '0x2'
    Stop.
    NMAKE : fatal error U1077: 'cd' : return code '0x2'
    Stop.
    NMAKE : fatal error U1077: 'cd' : return code '0x2'
    Stop.

    MfG Tronador



  • Kannst du bitte mal die C++-Syntax einschalten?

    Und was ist die Zeile 436??? (hab keine Lust mir den kompletten Code anzuschauen)



  • Artchi schrieb:

    Kannst du bitte mal die C++-Syntax einschalten?

    Und was ist die Zeile 436??? (hab keine Lust mir den kompletten Code anzuschauen)

    Entschuldige bitte....

    Der Compiler beschwert sich in der Zeile:

    for( iter = addMap.begin()->first;iter != addMap.end()->first;iter++){
    

    MfG Tronador



  • So:

    for( iter = addMap.begin();iter != addMap.end();iter++){
    

    Weil first ist der Schlüssel des Map-Index, second der Wert. Halt die, die du mit pair bzw. make_pair hinzugefügt hast.


Anmelden zum Antworten