看板 Programming 關於我們 聯絡資訊
※ 引述《[email protected] (薛丁格的貓)》之銘言: : ※ 引述《[email protected]》之銘言: : > 不是很懂你想要做什麼, 請先舉個簡單的例子說明一下, 這樣才能幫上忙 @@ : > 我猜你是想問, 有沒有辦法開個 binary file, : > 然後有個 function 可以幫你把 map 的內容寫到這檔案去? : > 如果是這樣, 那你只能硬幹了. : > 請用 iterator 將 map 的內容一筆一筆寫到檔案吧. : > (讀取時, 一筆一筆讀進來放回 map 去) : > 之所以會這樣, 是因為開發 compiler 的各家公司對 STL 的實作不同, : > physical layout 當然也就沒統一標準, : > 更別提統一的標準來輸入輸出 map 的內容了. : > (btw, 如果是 java 就簡單多了, 因為 java 提供 persistent storage @@) : 抱歉 沒把問題說清楚 : 若有一個 structure 如下 : struct obj{ : map<string,string> foo; : map<string, map<string,int> > foo_2; : string foo_3; : }ex; : 某段程式碼如下: : ofstream WriteFile("test.dat",ios::binary); : [processing code] : WriteFile.close(); : 我的問題是 如何在[processing code]這邊 將ex的所有內容存到 test.dat 裡面. : 有沒有簡單容易的方式 將 ex 的記憶體內容 寫到 test.dat : 反過來, 讀取的時候 將 test.dat 的內容 直接搬到 ex. 沒有, 原因就像之前說的. : 我提供一個暴力的方法 只能這樣做. : 這個問題可以用硬幹的方法, 也就是將 ex 的每個member 的每一筆資料慢慢寫入 : 但是寫好之後 要讀取時 : 我不知道 foo 的資料是否讀完了 而要開始讀 foo_2 或是 foo_3 的資料 所以你要提供額外的資訊. 比如在輸出 foo 前, 先輸出一個 integer, 用來表示該 map 的資料筆數. 同理, 輸出 foo2, foo3 前, 先輸出 integer, 代表 foo2 的資料筆數及 foo3 的長度 可用的方法還有很多, 像是用 marker 標出該 field 的範圍, (原理跟 C 裡的表示 string literal 語法類似) : 因為沒法判定 所以卡住了 ^^ : 還是請各位高手幫小弟的忙 謝謝 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 71.137.87.35