erase all pairs with a specified value in a std::map

K

kernus

i am looking for a more elegant/standard way to do this simple
operation,

however, for now, i just coded this beast. any comments will be
grateful,

ObserverMap::iterator itr = observers_.begin();
while(itr != observers_.end()){
if(itr->second == observer){
ObserverMap::iterator tmpItr = ++itr;
--itr;
observers_.erase(itr);
itr = tmpItr;
continue;
}

++itr;
}

- minglei
 
M

moonrie

IOW, you should be able to do what you need like so:

ObserverMap::iterator itr = observers_.begin();
while (itr != observers_.end()) {
if (itr->second == observer)
observers_.erase(itr++);
else
++itr;
}

How's that?

V

cool, that's really cool, a little arrange of code.

for(ObserverMap::iterator itr = observers_.begin(); itr !=
observers_.end(); )
if (itr->second == observer)
observers_.erase(itr++);
else
++itr;

- minglei
 
F

Frank Birbacher

Hi!

Victor said:
IOW, you should be able to do what you need like so:

ObserverMap::iterator itr = observers_.begin();
while (itr != observers_.end()) {
if (itr->second == observer)
observers_.erase(itr++);
else
++itr;
}

Now we consolidate the increment ++itr:

ObserverMap::iterator itr = observers_.begin();
while (itr != observers_.end()) {
const ObserverMap::iterator current = itr++;
if (current->second == observer)
observers_.erase(current);
}

This is less confusing to me.

Regards, Frank
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,009
Latest member
GidgetGamb

Latest Threads

Top