Erase in a map



I want to erase items in a map based on some criteria. However, as soon as the erase is called, iterator become invalid. I would like someone to tell me the better way to do it.

Here is the source code I am using, and it is crashing.

for ( pos = connectionMap.begin(); pos != connectionMap.end(); ++pos){
ConnectionInfo* conn = pos->second;

if ( current - conn->lastRequestTime > 60 * timeOut ) {
connectionMap.erase(pos);
}
}


To overcome the problem, I start the loop from the beginning after a item is removed. But this is too slow.

Thanks

Charles Zhang
.