Вы не включили самые важные части в свой вопрос, а именно:
std::map <std::string, int> getTheMap() {
return theMap;
}
getTheMap
возвращает копию, поэтому getTheMap().find("A");
возвращает итератор временному объекту (который перестает существовать после вызова завершается).
Следовательно, этот итератор ссылается на объект, который больше не существует, это висящий итератор. Разыменование его (как и в случае с mapElement->first
) вызывает неопределенное поведение
Наиболее идиоматическое c исправление будет для getTheMap
, чтобы вернуть ссылку, например:
std::map <std::string, int>& getTheMap() {
return theMap;
}