2016-11-19 4 views
0

У меня есть STL карта типа <string, int>, мне нужно скопировать эту карту в файл, но у меня возникли проблемы помещения типа ostream_iteratorИспользование ostream_iterator скопировать карту в файл

map<string, int> M; 

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

Error message error: no matching function for call to 'std::ostream_iterator, int>::ostream_iterator(std::ofstream&, const char [2])'|

так как карта M является типом, почему ostream_iterator не берет свой тип?

+0

Связанные: http://stackoverflow.com/questions/634087/stdcopy-to-stdcout-for-stdpair –

ответ

2

Если вы внимательно посмотрите на объявления станда :: ostream_iteratorhere, вы заметите, что ваше использование станда :: ostream_iterator неверно, потому что вы должны указать тип печатных элементов в качестве первого параметра шаблона.

тип элементов в станд :: Карта М станд :: пара < Const станд :: строка, Int>. Но вы не можете поставить std :: pair < const std :: string, int> как первый параметр шаблона, потому что нет способа по умолчанию для печати std :: pair.

Одним из возможных способов заключается в использовании зЬй :: for_each и лямбда:

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; 
    } 
);