这样删除会导致程序内存覆盖等一系列不可预知的bug 
 
map<string, string>::iterator iter; 
for ( iter = mm.begin();iter != mm.end(); iter ++ ) 
{ 
if ( iter->second == something ) 
{ 
mm.erase( iter ); 
} 
} 
 原因:当erase掉iter后,继续执行iter++,这个时候就乱套了 
正确方法: 
 
for (iter = mm.begin();iter != mm.end();) 
{ 
if ( iter->second == something ) 
{ 
mm.erase( iter++ ); 
} 
else 
{ 
iter++; // Use Pre Increment for efficiency. 
} 
} 
 可能有人不理解mm.erase(iter++) 
其实和这个是一样的 
 
for (iter = mm.begin();iter != mm.end();) 
{ 
if ( iter->second == something ) 
{ 
map<string, string>::iterator iter_erase; 
iter_erase = iter++ //先保存后++再删除 
mm.erase( iter_erase ); 
} 
else 
{ 
iter++; // Use Pre Increment for efficiency. 
} 
}