multimap und copy
-
Hallo
brauche bitte nochmal eure hilfe.
habe eine multimap angelegttypedef multimap<long,Arbeitsstunden> mp;
und mit werten gefüllt.
für die Klasse Arbeitsstunden ist der operator<< überladen.
nun versuche ich diese map mitcopy(mymap.begin(), mymap.end(),ostream_iterator<mp::value_type>(cout,", "));
auszugeben,erhalte aber diesen fehler:
c:\programme\microsoft visual studio\vc98\include\iterator(203) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'const struct std::pair<long const ,class Arbeitsstunden>' (or there is no acceptable conversion)
c:\programme\microsoft visual studio\vc98\include\iterator(203) : while compiling class-template member function 'class std::ostream_iterator<struct std::pair<long const ,class Arbeitsstunden>,char,struct std::char_traits<char> > &__thiscall
std::ostream_iterator<struct std::pair<long const ,class Arbeitsstunden>,char,struct std::char_traits<char> >::operator =(const struct std::pair<long const ,class Arbeitsstunden> &)'so richtig werde ich aus der meldung nicht schlau
muß ich für pair noch einmal den operator<< überladen??gruß elwida
-
dein Problem ist hier, dass ein (multi)map Iterator ein std::pair ist! Dafür gibt es aber kein operator<<. Eine möglichkeit hier wäre, wenn du den operator<< für std::pair eben erzeugst
-
ich würde die ausgabe über for_each machen
der functor gibt dann das pair an den stream aus.
-
ist dies legal?
ostream& operator<<(ostream& os,multimap<long,Arbeitsstunden>&a) { typedef multimap<long,Arbeitsstunden>::iterator ps; ps p; for(p=a.begin(); p!=a.end();p++) { os<<p->first<<p->second; } return os; }
dies soll außerdem meinen vector in eine datei schreiben können
gruß elwida
-
war der code so erschreckend schlecht
das keiner mehr antwortet?@ Shade Of Mine
wenn ich for_each verwende wie müsste der functor
dann aussehen damit ich auch meine map in eine
datei schreiben könnte?gruß elwida
-
functor als idee:
struct functor { ostream* out; functor(ostream* out) : out(out) {} template<typename Key, typename Val> void operator()(pair<Key, Val> const& p) { (*out)<<p.first<<" = "<<p.second<<'\n'; } }
deinen code finde ich nicht so gut, da du nen op<< für eine spezielle map definierst. dies kann zu unerwarteten verhalten führen, wenn jemand die gleiche map woanders anlegt...
ansonsten würde ich a const machen...
-
suuper tausend dank Shade
gruß elwida