You cannot erase the current item without updating the iterator first. So you must make a copy of the iterator to be able to erase an element inside the loop.
CIdToTargetMap * pIdToTargetMap = itEvent->second;
CSourceToIdMap::iterator itTemp = itEvent;
++itEvent;
m_EventMap.erase(itTemp);
delete pIdToTargetMap;
However, if all items are removed, then Ian solution is more appropriate.
Also as in Ian solution, it is not necessary to have a temporary variable
pIdToTargetMap
in this case as it does not affect exception safety. In more complex case, it might be useful to to it that way as it help ensure you won't access a deleted item afterward.