Вы можете сделать это, например, следующим образом
#include <iostream>
#include <map>
#include <iterator>
int main()
{
std::multimap<int, int> multi;
multi.insert( { 1, 1 } );
multi.insert( { 1, 12 } );
multi.insert( { 2, 500 } );
multi.insert( { 2, 789 });
multi.insert( { 1, 888 } );
for ( const auto &item : multi )
{
std::cout << "{ " << item.first << ", " << item.second << " } ";
}
std::cout << '\n';
if ( !multi.empty() )
{
for ( auto prev = std::begin( multi ),
next = std::begin( multi ),
last = std::end( multi );
++next != last; )
{
if ( next->first == prev->first ) prev = multi.erase( prev );
else ( ++prev );
}
}
for ( const auto &item : multi )
{
std::cout << "{ " << item.first << ", " << item.second << " } ";
}
std::cout << '\n';
return 0;
}
Вывод программы:
{ 1, 1 } { 1, 12 } { 1, 888 } { 2, 500 } { 2, 789 }
{ 1, 888 } { 2, 789 }
Если вы хотите создать копию с уникальными ключами, вы можете использовать стандартный алгоритм std::unique_copy
. Например
#include <iostream>
#include <map>
#include <iterator>
#include <algorithm>
int main()
{
std::multimap<int, int> multi;
multi.insert( { 1, 1 } );
multi.insert( { 1, 12 } );
multi.insert( { 2, 500 } );
multi.insert( { 2, 789 });
multi.insert( { 1, 888 } );
for ( const auto &item : multi )
{
std::cout << "{ " << item.first << ", " << item.second << " } ";
}
std::cout << '\n';
std::multimap<int, int> multi2;
std::unique_copy( std::rbegin( multi ), std::rend( multi ),
std::inserter( multi2, std::end( multi2 ) ),
[]( const auto &a, const auto &b )
{
return a.first == b.first ;
} );
for ( const auto &item : multi2 )
{
std::cout << "{ " << item.first << ", " << item.second << " } ";
}
std::cout << '\n';
return 0;
}
Вывод программы такой же, как показано выше
{ 1, 1 } { 1, 12 } { 1, 888 } { 2, 500 } { 2, 789 }
{ 1, 888 } { 2, 789 }