ostream_iterator的模板参数 - 每个元素都是对

时间:2013-06-06 07:42:31

标签: c++ templates iterator std-pair

我正在尝试使用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);

2 个答案:

答案 0 :(得分:2)

operator <<没有std::pair。您不能简单地将ostream_iteratorstd::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;
}

或者查看pretty print C++ containers