У меня есть следующий код:
#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;
}
В этом коде мне просто нужно скопировать карту в выходной поток. Для этого мне нужно определить оператор < (0) - ОК.
Но в соответствии с именами, определяющими правила, компилятор не может найти мой оператор < <().
Поскольку std:: cout, std:: pair и std:: copy, который вызывал мой оператор < < - все из пространства имен std.
Быстрое решение - добавьте мой oerator < < к пространству имен std - но это уродливо, imho.
Какие решения или обходные пути для этой проблемы вы знаете?