map durchlaufen



  • hi,
    ich will alle elemente einer map durchlaufen, dazu hab ich mir folgenden code gebastelt:

    int a=3;
          map<int,int> testmap;
          map<int,int>::iterator i;
          for(i=testmap.begin();i!=testmap.end();++i)
          {
             if(i->second>a) i->second-=1; //wenn der wert grösser als ein übergebener is, um 1 verringern...
          }
    

    is der ok so, oder kann es dabei probleme geben?

    grüsse steve



  • Müsste gehen.
    Probiers doch aus.



  • klar, klappen tuts ja... man weis ja aber nie was der computer sich noch so überlegt 😉 alles was schiefgehen kann, geht auch schief ^^

    grüsse steve



  • Ich würde i in der Schelife definieren, aber es sieht sonst eigentlich gut aus.



  • ich benutze den iterator aber nochmal deswegen hab ich gedacht, so brauch ich ihn nur einmal definieren 😕

    jetzt hab ich aber folgendes problem:

    if((i->second >= a) && (i->second <= b)) testmap.erase(i);
    

    also wenn der enthalten wert zwischen a und b oder gleich a oder b ist, soll er gelöscht werden. irgendwie klappt es aber nicht: er löscht nur die werte, die gleicha oder b sind, aber nicht die zwischen a und b... hab ich jetzt n denkfehler? 😕
    und a ist sicher der kleinere von beiden...

    grüsse steve



  • Noch eine Möglichkeit:

    template<class T>
    struct check_range : public unary_function<pair<T const,T>,void >{
     public:
      check_range(T lower, T upper):_upper(upper),_lower(lower){}
    
      void operator()(pair<T const,T> p){
       if((p.second < _lower) || (p.second > _upper)){
        //do something
       } 
      }
    
      private:
       T _lower, _upper;
    };
    
    map<int, int> t;
    for_each(t.begin(),t.end(), check_range<int>(2,5));
    


  • thx, ich wollt aba eigentlich meinen eigenen code zum laufen kriegen 😕
    wenn ichs im vc6 compile sagt er mir "das prog hat n fehler verursacht"

    grüsse steve



  • hm, das hat nicht gefunzt, weil auf einen key 2 werte in der map waren... aber wieso kann ich sie über find lesen, aber nicht indem ich den iterator direkt verändere? 😕
    /edit: deswegen hat wahrscheinlich die bin vom vc6 net gefunzt, weil er da die maps wohl leicht anders organisiert...
    /edit#2: ne die vom vc6 compilte version kratzt immer noch ab 😞
    /edit#3: hm der vc scheint probleme damit zu haben das ich den iterator nochmal für ne andere map verwende..

    grüsse steve


Anmelden zum Antworten