В соответствии с this:Если первый и последний в диапазоне стирания карты равны, элемент будет удален или нет?
итераторы, определяющие диапазон, в пределах контейнера карты должны быть удалены: [первый, последний). то есть диапазон включает в себя все элементы между первым и последним, включая элемент, обозначенный первым, но не тот, который указан последним.
Это неоднозначно, так как оно не относится к случаю, когда первый и последний равны. Если первый и последний равны, элемент будет удален или нет? Это представление кода в вопросе:
map<uint16_t, boost::shared_ptr<SPacket> >::iterator it = m_MyMap.find(ack);
if (it != m_MyMap.end()) m_MyMap.erase(m_MyMap.begin(), it);