2010-04-24 5 views
0

Мне интересно, есть ли быстрый способ сбросить STL set на диск, а затем прочитать его позже.Выполнение сериализованных объектов в C++

Внутренняя структура set является двоичным деревом, поэтому, если я наизусть сериализую его, когда я прочитаю его, программа должна будет пройти через процесс вставки каждого элемента снова. Я думаю, что это медленно, даже если оно вернется в правильном порядке, исправьте меня, если я ошибаюсь.

Есть ли способ «сбросить» память, содержащую набор на диск, а затем прочитать ее позже? То есть сохраните все в двоичном формате, тем самым избегая повторной установки.

Усиливают ли инструменты для сериализации?

Спасибо!

EDIT: О, я, вероятно, следует читать, http://www.parashift.com/c++-faq-lite/serialization.html я буду читать его сейчас ... нет, это не помогает

ответ

2

Поскольку каждый элемент набора находится где-то в куче, вы не можете просто сбросить структуру на диск. Поэтому вам нужна правильная процедура сериализации, которая проходит через каждый элемент.

Чтобы снова прочитать элемент, вы можете использовать «подсказки», которые позволяют вам намекать на способ вставки, в который должен быть вставлен элемент. Это может привести к тому, что конструкция набора вернется к линейной сложности вместо n log n.

+0

oh да ~ это правильно. Некоторые функции вставки имеют подсказки. – jm1234567890

2

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

Если вы поместили контейнер в непрерывный блок памяти, этот блок должен иметь некоторое свободное пространство, а чтение пропавшего пространства с диска тратит время ... и дисковое пространство.

Это классическая преждевременная оптимизация.

Если вам действительно нужно, Boost Interprocess имеет (относительно) сериализуемые контейнеры.

+0

ОК :(спасибо за это! Но, я посмотрю, есть ли какие-либо другие комментарии перед голосованием. – jm1234567890

+1

@ jm1234567890: Вы можете наложить несколько голосов, это просто принятие того, что вы можете подождать до этого. – sbi