使用ostream_iterator将地图复制到文件中

时间:2016-11-19 07:01:18

标签: c++ c++11 stl std

我有<string, int>类型的 STL地图,我需要将该地图复制到一个文件中,但我在设置ostream_iterator

map<string, int> M;

ofstream out("file.txt");
copy( begin(M), end(M), ostream_iterator<string, int>(out , "\n") );  
  

错误消息错误:没有匹配的调用函数   &#39;的std :: ostream_iterator,   int&gt; :: ostream_iterator(std :: ofstream&amp;,const char [2])&#39; |

由于地图M是一种类型,为什么不使用其类型?

1 个答案:

答案 0 :(得分:5)

如果仔细查看 std :: ostream_iterator here的声明,您会注意到您对 std :: ostream_iterator 的使用不正确,因为您应指定打印元素的类型作为第一个模板参数。

std :: map M中的元素类型是 std :: pair&lt; const std :: string,int&gt; 。但你不能把 std :: pair&lt; const std :: string,int&gt; 作为第一个模板参数,因为没有默认方式来打印 std :: pair

一种可能的解决方法是使用 std :: for_each 和lambda:

std::ofstream out("file.txt");

std::for_each(std::begin(M), std::end(M),
    [&out](const std::pair<const std::string, int>& element) {
        out << element.first << " " << element.second << std::endl;
    }
);