title: What happens if you call erase() on a map element while iterating from begin to end?
body: <p>In the following code I loop through a map and test if an element needs to be erased.  Is it safe to erase the element and keep iterating or do I need to collect the keys in another container and do a second loop to call the erase()?</p>
  
  <pre><code>map&lt;string, SerialdMsg::SerialFunction_t&gt;::iterator pm_it;
  for (pm_it = port_map.begin(); pm_it != port_map.end(); pm_it++)
  {
      if (pm_it-&gt;second == delete_this_id) {
          port_map.erase(pm_it-&gt;first);
      }
  }
  </code></pre>
  
  <p>UPDATE: Of course, I then <a href="https://stackoverflow.com/questions/52714/stl-vector-vs-map-erase">read this question</a> which I didn't think would be related but answers my question.</p>