How to use std::copy with std::map?

  • Thread starter Siegfried Heintze
  • Start date
S

Siegfried Heintze

Should the following work? It does on some compilers. How can I get it to
work on g++ 3.2?
On g++ 3.2 it keeps telling me that there is no such function operator <<
for ostream and pair<string,string>. But there is!
And I can call it! And it works! So why cannot std::copy find it?

thanks,
Siegfried

template<typename K, typename V>
ostream& operator<<(ostream& os, std::pair<K,V>& p){ return os << p.first <<
p.second; }
 
V

Victor Bazarov

Siegfried said:
Should the following work? It does on some compilers. How can I get
it to work on g++ 3.2?

Compiler-specific questions should be asked in the newsgroup dedicated
to that compiler. Try gnu.g++.help.
On g++ 3.2 it keeps telling me that there is no such function
operator << for ostream and pair<string,string>. But there is!
Where?

And I can call it! And it works! So why cannot std::copy find it?

thanks,
Siegfried

template<typename K, typename V>
ostream& operator<<(ostream& os, std::pair<K,V>& p){ return os <<
p.first << p.second; }

Is that what you wrote? Where does this definition appear? In
the global scope?
std::map<string,string> m; m[(string)"hello"] = (string)"there";
std::copy(m.begin(), m.end(),
ostream_iterator said:
(cout, ",");

Argument-dependent lookup (ADL) does not look in all the namespaces.
It limits its search to the types involved and the namespaces where
those types are defined. You need to place your operator in 'std'
namespace.

Next time please follow the recommendations of FAQ 5.8.

V
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top