我正在尝试使用 stl copy() 在地图中打印键值对。代码如下:
#include <iterator>
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
//compile error if I comment out "namespace std"
namespace std {
template<typename F, typename S>
ostream& operator<<(ostream& os, const pair<F,S>& p) {
return os << p.first << "\t" << p.second << endl;
}
}
int main() {
map<int, int> m;
fill_n(inserter(m, m.begin()), 10, make_pair(90,120));
copy(m.begin(), m.end(), ostream_iterator<pair<int,int> >(cout,"\n"));
}
我正在尝试重载运算符<<。问题是代码不会编译,除非我将重载 operator<< 的定义用namespace std
. 我认为这是由于 C++ 的名称查找机制,我仍然无法理解。即使我这样定义非模板版本:
ostream& operator<<(ostream& os, const pair<int,int>& p) {
return os << p.first << "\t" << p.second << endl;
}
它仍然不会编译。谁能解释为什么?