Сериализация класса STL - PullRequest
       11

Сериализация класса STL

6 голосов
/ 12 декабря 2010

возможно ли сериализовать любой класс STL, включая std :: string?У меня есть наборы std :: strings, и я пытаюсь записать их в файл и загрузить обратно в std :: set.

Ответы [ 4 ]

10 голосов
/ 12 декабря 2010

Да, это возможно.Например, при boost.serialization .

Для STL прочитайте соответствующий учебный раздел

5 голосов
/ 28 июня 2011

Пример использования boost :: serialization для сериализации типа STL

#include <map>
#include <fstream>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>

#include <boost/serialization/map.hpp>

int main(int argc,char** argv) {
  std::ofstream s("tmp.oarchive");
  boost::archive::text_oarchive oa(s);
  std::map<int,int> m;
  m[1] = 100;
  m[2] = 200;
  oa << m;
}

Компилировать с

g++ -lboost_serialization myfile.cc

Обратите внимание, что

  1. #include <boost/archive/text_iarchive.hpp> должен быть до любой другой сериализации boost.
  2. Вам необходимо включить заголовок для типа STL, который вы хотите заархивировать.
4 голосов
/ 12 декабря 2010

Если вы просто хотите записать std::set<std::string> в файл и прочитать его обратно, а ваш проект еще не использует Boost, вы можете попробовать что-то простое:

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

Это простозаписать строки, по одной на строку, в текстовый файл.Затем прочитать их:

ifstream file("file.txt");
string line;
while(getline(file, line))
    theSet.insert(line);
1 голос
/ 24 июля 2014

проверить это.достаточно lite

сериализация STL

нужен только один файл CPP

Решение для сериализации lite

существует несколько библиотек поддержкисериализация, как и protobuffer, boost: сериализация, слишком тяжелая для меня.поэтому я написал эту облегченную версию.

поддержка

  • вектор
  • карта
  • набор
  • строка
  • примитивы (int, double, long, ...)
  • поддержка endian
  • поддержка вложенных контейнеров

использовать char вместо bool в STL почему

build

Вы можете построить этот проект с помощью CMake.или просто импортируйте serialization.h в ваш проект.

определите CHECK_ENDIAN = 1, если вы хотите проверить endian

demo

check testSerialization.cpp

грядущий сом

обратное преобразование.

...