Постоянство std :: map в C ++ - PullRequest
       21

Постоянство std :: map в C ++

9 голосов
/ 26 сентября 2008

Знаете ли вы какой-либо простой или простой способ сделать объект карты (из библиотеки STL) постоянным (то есть записать его в файл), чтобы вы могли восстановить его состояние позже, когда программа будет запущена позже ??

Спасибо за вашу помощь

Ответы [ 3 ]

11 голосов
/ 26 сентября 2008

Я считаю, что библиотека Boost Serialization способна сериализовать std :: map, но сама стандартная библиотека не предоставляет никаких средств. Сериализация - это отличная библиотека с множеством функций, которая проста в использовании и может быть распространена на ваши собственные типы.

10 голосов
/ 26 сентября 2008

Если вы хотите сделать это вручную, так же, как при сохранении любой другой структуры контейнера, запишите отдельные части на диск:

outputFile.Write(thisMap.size());
for (map<...>::const_iterator i = thisMap.begin(); i != thisMap.end(); ++iMap)
{
    outputFile.Write(i->first);
    outputFile.Write(i->second);
}

и затем прочитайте их обратно:

size_t mapSize = inputFile.Read();
for (size_t i = 0; i < mapSize; ++i)
{
    keyType key = inputFile.Read();
    valueType value = inputFile.Read();
    thisMap[key] = value;
}

Очевидно, вам нужно будет заставить все работать в зависимости от типа вашей карты и файловой библиотеки ввода / вывода.

В противном случае попробуйте повысить сериализацию или новую библиотеку Google для сериализации .

2 голосов
/ 26 сентября 2008

Ответ - сериализация. Особенности зависят от ваших потребностей и вашего окружения. Для начала посмотрите библиотеку Boost Serialization: http://www.boost.org/doc/libs/1_36_0/libs/serialization/doc/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...