ostream_iterator >(cout,"") 不能输出 出错解决思路

ostream_iterator<pair<int ,string> >(cout,",") 不能输出 出错
#include<iostream>
#include<map>
#include<iterator>
using namespace std;
#include <utility> 
template<typename T>
class bb
{
public:
bool operator()(const T& a,const T &b)const
{
return a<b;
}
};
ostream & operator<<(ostream & os,const pair<int,string> & p) const
{
 return os<<p.first<<":"<<p.second<<endl;
}
int main()
{
map<int,string,bb<int> > cc;
cc.insert(make_pair(1,"lona"));
cc.insert(make_pair(2,"lona"));
copy(cc.begin(),cc.end(),ostream_iterator<pair<int,string> >(cout,","));
}

------解决方案--------------------
探讨

#include <utility>
#include <iostream>
#include <iterator>
#include <map>
#include <algorithm>
#include<string>
template<typename T>
class bb
{
public:
bool operator()(const T&amp; a,const ……

------解决方案--------------------
早都说了把<<加入std空间就行了嘛.....

C/C++ code
    ostream_iterator<_Ty, _Elem, _Traits>& operator=(const _Ty& _Val)
        {    // insert value into output stream, followed by delimiter
        *_Myostr << _Val;
        if (_Mydelim != 0)
            *_Myostr << _Mydelim;  这里要调用lz写的<<,如果不在同一个命名空间是找不到的,自然会报错
        return (*this);
        }