Ненавижу дождь на параде, но я не думаю, что то, что вы предлагаете, безопасно.
i ++ - это оператор постинкремента, что означает, что i увеличивается после вызова стирания. Но стирание делает недействительными все итераторы, указывающие на удаляемый элемент. Так что к тому времени, когда я увеличивается, это уже не действует.
Если вам повезет, он может работать случайно случайно, пока однажды он перестанет работать.
Насколько я знаю, нет никакого способа обойти это, но что-то вроде:
// tmp and i are both iterators
tmp = i;
++i;
hash_map.erase(tmp);