Вы были почти правы, но трюк с удалением элементов в картах во время итерации состоит в том, чтобы захватить новый итератор, возвращенный erase
.Я также обобщил функцию, чтобы ее можно было использовать в качестве аргумента, а не ограничивался m_StudentMap
, и остановил внутренний цикл, как только ключи расходятся.
template <typename K, typename V>
void removeDuplicates(std::multimap<K, V>& mmap)
{
if (mmap.size() < 2) return;
for (auto it = mmap.begin(); it != prev(mmap.end()); ++it)
for (auto it2 = next(it); it2 != mmap.end() && it2->first == it->first; )
if (it->second == it2->second)
it2 = mmap.erase(it2);
else
++it2;
}
Вы можете видеть, что она работает/ вилка и т. д. здесь .