С++ Serialize/Deserialize std:: map <int, int> from/to file - программирование
Подтвердить что ты не робот

С++ Serialize/Deserialize std:: map <int, int> from/to file

У меня есть std:: map.

Я хотел бы знать, могу ли я записать его в файл (а также прочитать его из файла) в 1 строке, используя fwrite, или если мне нужно писать/читать каждое значение отдельно.

Я надеялся, что, поскольку ничего особенного, это может быть возможно.

4b9b3361

Ответ 1

используйте boost::serialization для сериализации в одной строке. Заголовок для него:

boost/serialization/map.hpp

Пример кода

#include <map>
#include <sstream>
#includ  <iostream>
#include <boost/serialization/map.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>

int main()
{
   std::map<int, int> map = {{1,2}, {2,1}};
   std::stringstream ss;
   boost::archive::text_oarchive oarch(ss);
   oarch << map;
   std::map<int, int> new_map;
   boost::archive::text_iarchive iarch(ss);
   iarch >> new_map;
   std::cout << (map == new_map) << std::endl;
}

Вывод:

g++ -o new new.cpp -std=c++0x -lboost_serialization
./new
1

для файла просто используйте std::ifstream/std::ofstream вместо std::stringstream и может быть binary_archive вместо text_archive.

Ответ 2

Для сериализации карты нет однострочного интерфейса. Вам нужно будет написать каждую пару ключ/значение отдельно. Однако это действительно не намного сложнее, чем цикл for.

Используя boost, может быть какой-то способ, но я не знаком с точными API.