Ho codice seguente:std :: copia a std :: cout per std :: coppia
#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;
}
In questo codice voglio solo copiare mappa per flusso di output. Per fare questo ho bisogno di definire l'operatore < < (..) - OK. Ma secondo nomi che trovano regole il compilatore non trova il mio operatore < <().
Perché std :: cout, std :: pair e std :: copy che ha chiamato il mio operatore < < - tutto dallo spazio dei nomi std.
Soluzione rapida: aggiungi il mio oerator < < allo spazio dei nomi std, ma è brutto, imho.
Quali soluzioni o soluzioni temporanee per questo problema conosci?
BTW, esiste un algoritmo STL che eseguirà il primo ciclo for, http://www.sgi.com/tech/stl/generate.html, quindi se si ritiene veramente che i valori casuali debbano essere assegnati a posizioni casuali , http://www.sgi.com/tech/stl/random_shuffle.html. – paxos1977