我正在尝试使用ostream_iterator将对的向量写入file.ostream_iterator需要在声明时应用模板参数。 向量定义为 -
vector<pair<string,long>> test;
当我将对作为模板传递给ostream_iterator时,它显示错误 -
错误1错误C2679:二进制'&lt;&lt;' :没有找到哪个运算符采用'const std :: pair&lt; _Ty1,_Ty2&gt;'类型的右手操作数(或者没有可接受的转换)C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ include \ iterator 531 1 wordsegmentation
在这种情况下,什么可能是正确的论点?
编辑 - 代码片段
vector<pair<string,long>> t;
......
//t is filled up with elements
ostream_iterator<pair<string,long>> output_iterator(out, "\n");
std::copy(t.begin(), t.end(), output_iterator);
答案 0 :(得分:2)
operator <<
没有std::pair
。您不能简单地将ostream_iterator
与std::pair
一起使用。
您可以使用派生自pair
或存储pair
的其他内容或编写类,并使用它。您不能在std
命名空间中编写重载,因为它会导致未定义的行为,并且您不能在全局命名空间中重载此运算符,因为ADL
将找不到正确的重载(如果您使用stl算法,如{{1 },copy
)。
简单地说,这样的事情会很好用
ostream_iterator
答案 1 :(得分:1)
您可以简单地重载std::ostream& operator<<
:
std::ostream& operator<<(std::ostream& o, const pair<string,long>& p)
{
return o << p.first << " " << p.second;
}