Connecting Tech Pros Worldwide Forums | Help | Site Map

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

kernus@gmail.com
Guest
 
Posts: n/a
#1: Jun 27 '08
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

Victor Bazarov
Guest
 
Posts: n/a
#2: Jun 27 '08

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


kernus@gmail.com wrote:
Quote:
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;
OK, maybe I'm stating the obvious here, but the above FOUR lines
can be rewritten as just one:

observers_.erase(itr++);
Quote:
continue;
Drop the 'continue' and add 'else' below.
Quote:
}
add
else

here.
Quote:
>
++itr;
}
>
- minglei
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
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
moonrie@gmail.com
Guest
 
Posts: n/a
#3: Jun 27 '08

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


Quote:
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
Frank Birbacher
Guest
 
Posts: n/a
#4: Jun 27 '08

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


Hi!

Victor Bazarov schrieb:
Quote:
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
Closed Thread