ich nächste Code haben:std :: copy std :: cout für std :: pair
#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 diesem Code I Karte Ausgabestrom nur kopieren möchten. Dazu brauche ich definieren Operator < < (..) - OK. Aber nach Namen finden Regeln Compiler kann nicht finden, mein Operator < <().
Weil std :: cout, std :: pair und std :: Kopie, die mein Operator < < genannt - alles aus Namensraum std.
Schnelle Lösung - fügen Sie meinen oerator < < zu Std Namespace - aber es ist hässlich, imho.
Welche Lösungen oder Workarounds für dieses Problem kennen Sie?
BTW, gibt es einen STL-Algorithmus, der die erste for-Schleife, http://www.sgi.com/tech/stl/generate.html erreichen wird, dann, wenn Sie wirklich das Gefühl haben, dass die zufälligen Werte zugewiesene zufällige Positionen benötigen , http://www.sgi.com/tech/stl/random_shuffle.html. – paxos1977