2014-10-08 76 views
0

我正在處理間隔分區問題(例如:http://kartikkukreja.wordpress.com/2013/09/26/interval-partitioning-problem/),我必須將最優計劃寫入輸出文件。我目前使用地圖>來存儲分配給多個分區的時間間隔。第一個int表示分區號,對應的向量表示分配給該分區的時間間隔。C++中高效的輸出數據結構

要將內容寫出到一個文件中,我遍歷地圖的所有鍵並寫出每個鍵的向量。這是存儲數據的最有效的數據結構(partition_number,interval)嗎?或者我可以使用地圖以外的東西,以便能夠以更快的方式編寫輸出結果?

+0

該文件中的數據結構不必與內存中的數據結構相匹配。例如,數據文件中的數據結構需要設計爲易於閱讀和快速解析/處理。數據文件還可能包含完整性支持的字段。 – 2014-10-08 23:57:57

+0

你多久寫一次文件?你多久閱讀一次?數據是大還是小? – 2014-10-08 23:59:02

+0

順便說一句,指向內存中對象的指針不會轉換爲數據文件,因爲您的程序可能不在同一位置,或者您的內存可能不在一次調用到另一次調用的同一位置。 – 2014-10-09 00:00:06

回答

0

這很大程度上取決於您試圖輸出的內容。例如,解決這個問題的更好的數據結構是std::forward_list<std::pair<int,int>>,其中第一個是int,第二個是當前需要的分區的數量。

鑑於請求:

enter image description here

std::forward_list將包含std::pair S:

(時間,分區)
{0,1},
{1,2},
{3,3},
{4,1},
{5,2},
{6,1},
{7,0}

記住,當你與文件IO工作時,IO將是成本的大部分份額。所以在這一點上,這只是一個問題,你想要投入多少努力來拋棄這些數據。如果打印這樣的要領還不夠,請告訴我,我可以掛鉤其他東西:

std::cout << "(time, partitions)" << std::endl; 
for(auto i = partitions.begin(); i != partitions.end(); ++i){ 
    std::cout << std::setw(5) << i->first << std::setw(1) << ',' << std::setw(12) << i->second << std::endl; 
}