2010-04-24 53 views
0

我想知道是否有快速的方法將STL set轉儲到磁盤,然後再讀回它。在C++中的序列化對象的性能

set的內部結構是一個二叉樹,所以如果我天真地序列化它,當我讀回時,程序將不得不通過再次插入每個元素的過程。即使按照正確的順序閱讀,我認爲這很慢,糾正我,如果我錯了。

有沒有辦法將包含該組的內存「轉儲」到磁盤中,然後再讀回來?也就是說,將所有內容保存爲二進制格式,從而避免重新插入。

升壓串行化工具做到這一點嗎?

謝謝!

編輯:哦,我也許應該讀,http://www.parashift.com/c++-faq-lite/serialization.html我現在讀它...沒有它並沒有真正幫助

回答

2

由於每個集合元素都位於堆的某個位置,因此不能將結構轉儲到磁盤。因此,你需要一個正確的序列化例程來遍歷每個元素。

要再次讀取元素,可以使用「提示」,它允許您提示插入方法插入元素的位置。這可以將該集合的構造恢復爲線性複雜性而不是n log n。

+0

哦是的〜這是正確的。一些插入函數有提示。 – jm1234567890 2010-04-24 17:52:10

2

沒有,如果你實際上是回讀從硬盤(或任何可能永久存儲),機械部分將成爲瓶頸。

如果將容器放在連續的內存塊中,該塊必須有一定的可用空間,並且從磁盤讀取浪費的空間會浪費時間......以及磁盤空間。

這是經典的過早優化。

如果你真的發現自己需要它,Boost Interprocess有(相對)序列化友好的容器。

+0

ok :(謝謝你的!但是,我會看看在投票前是否有其他意見。 – jm1234567890 2010-04-24 08:34:02

+1

@ jm1234567890:你可以投幾個票,這只是接受你可能要等待之前做的事 – sbi 2010-04-24 12:09:32