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