Сохранение/чтение map<string,string*> в файл

awpe

Доброго времени суток, Нужно сделать БД для индексации содержимого текстовых файлов, сначала решил, что все просто: читаем файл и записываем данные в виде map<"some_word","file_name_string">, соответственно, потом можно по запросу слова определить имена файлов, в которых оно встречается. Однако, если файлы очень большие и/или их много, имеет смысл сохранять данные на диск. Соответственно, при дальнейшем чтении может возникнуть проблема с нехваткой оперативной памяти(или неэффективным её использованием). На данный момент я обладаю навыками работы с файлами в стиле C, в случае с известным размером данных можно читать файл по блочно, указывая размер очередного блока для чтения, а как быть с map(ведь там данные не так уж просто хранятся)? Может их вообще в таком виде(map) не сохраняют(да и не очень представляю чтобы map([iterator])>>ostream работало), а строят при чтении из обычного файла-таблицы (пара - ключ значение)? И еще - как избежать повторения имен файлов (тоже ведь строка, а значит лишняя память), на ум приходит: сделать файл с парами номер - имя_файла, а в "словаре" будут пары слово - номер. Потом можно такой файл "ужать" для пущей "правильности". В общем я не в теме(сохранения/чтения контейнеров STL на диск), подскажите пожалуйста где прав/неправ или ссылкой полезной поделитесь.Заранее благодарю.
2 ответа

awpe

awpe, boost::serialization или нечто вроде. Просто так не записать.


awpe

Тогда остается словарь только использовать, и каждый раз строить структуру. А в STL есть что-нибудь для сжатия текста?