У меня есть следующий код:станд :: копию StD :: COUT для станд :: пары
#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;
}
В этом коде я просто хочу карту скопировать в выходной поток. Для этого мне нужно определить оператора < < (..) - ОК. Но в соответствии с названиями правил поиска компилятор не может найти моего оператора < <().
Потому что std :: cout, std :: pair и std :: copy, который вызвал мой оператор < < - все из пространства имен std.
Быстрое решение - добавьте мой oerator < < в пространство имен std - но это уродливое, imho.
Какие решения или обходные пути для этой проблемы вы знаете?
BTW, существует алгоритм STL, который выполнит первый цикл for-loop, http://www.sgi.com/tech/stl/generate.html, а затем, если вы действительно чувствуете, что случайным значениям нужны назначенные случайные местоположения , http://www.sgi.com/tech/stl/random_shuffle.html. – paxos1977