std :: copie en std :: cout pour std :: paire

J'ai de code suivant:

#include <iostream>
#include <algorithm>
#include <map>
#include <iterator>

//namespace std
//{

std::ostream& operator << ( std::ostream& out, 
                const std::pair< size_t, size_t >& rhs )
{
    out << rhs.first << ", " << rhs.second;
    return out;
}
//}

int main() 
{

    std::map < size_t, size_t > some_map;

    //fill  some_map with random values
    for ( size_t i = 0; i < 10; ++i )
    {
        some_map[ rand() % 10 ] = rand() % 100;
    }

    //now I want to output this map
    std::copy( 
        some_map.begin(), 
        some_map.end(), 
        std::ostream_iterator< 
              std::pair< size_t, size_t > >( std::cout, "\n" ) );

    return 0;
}

Dans ce code, je veux juste copier la carte de flux de sortie. Pour ce faire, j'ai besoin de définir l'opérateur <<(..) - OK.
Mais, d'après les noms de trouver des règles compilateur ne peut pas trouver mon opérateur<<().
Parce que std::cout, std::pair et std::copy qui a appelé mon opérateur<< - à partir de l'espace de noms std.

Solution rapide - ajouter mes oerator<< espace de noms std - mais c'est moche, à mon humble avis.

Quelles solutions ou une solution de contournement pour ce problème, savez-vous?

source d'informationauteur bayda