2015-03-25 28 views
1

我有兩種方法可以做到這一點。第一個:將地圖寫入文件C++

string output; 
for (auto& kv : stored) { 
    output.append(kv.second + "\n"); 
} 
insert(file, output); 

其中insert()是:

void insert(string file, string str) { 
    ifstream stream(file); 
    stream << str; 
    stream.close(); 
} 

第二種方法:

ifstream stream(file); 
for(auto& kv : stored) { 
    stream << kv.second; 
} 
stream.close(); 

其中在兩種情況下,stored是類型的map<int, string>

哪種方法是更有效的?

編輯: 對於誰是告訴我這個人是重複的,我想知道什麼是使用了兩部,而不是如何做最有效的方法。

+1

爲什麼不基準它 – 2015-03-25 05:33:24

+1

什麼是標杆? – 2015-03-25 05:33:48

+1

很難判斷哪一個更快,更好地進行基準測試。基準測試會多次運行您的程序(數千甚至數百萬次),並使用第一種方法和第二種方法記錄時間。雖然我更喜歡方法2,因爲它看起來更清晰。 – 2015-03-25 05:37:13

回答

1

比較這些方法的效率時需要考慮兩點 - 內存效率和時間效率。

就存儲效率而言,第二種方法是明顯的贏家,因爲它需要固定數量的額外內存,而第一種方法需要的數量與正在寫入的映射的大小成比例。

就時間而言,應該沒有明顯差異,因爲操作主要是寫入文件所花費的時間。文件訪問速度比你在內存中做的任何事都慢,包括在第一種方法中準備字符串。

注:當然,你應該使第二種方法做的正是第一個廣告:

ifstream stream(file); 
for(auto& kv : stored) { 
    stream << kv.second << '\n'; 
    // Add '\n' character ^^^^ 
} 
stream.close();