From:http://www.cppblog.com/sandy/archive/2006/01/05/2448.html
配置文件讀寫是項目中經常會用到的,如果僅僅是遵從“逐條添加-查找”的方式,當數據量上升的時候[1],很容易導致巨大的時間消耗:SetKeyValue函數所需時間以N*N的方式增長[4]。
爲此,根據項目實際情況[2],使用map,將查找時間變成了常數級別[5]。
結論:map和multimap[3] 的作用非常大。
[1] 每個數據值都比較小,時間消耗,參見源鏈接代碼。
[2] 不存在相同的section,也沒有相同的key。
[3] Ogre中的配置文件基本上也是按照這種方式組織的。
[4] 優化前的代碼採用的是“兩級鏈表”結構:在搜索時,先找到section,然後再搜索key,所以,時間上是N*N的(採用的是順序查找方式)。在優化後,(可以對比前後的數據結構),使用了map類型的find函數,提高了查找效率。
[5] 這裏談談yathing個人的體會:在以前編寫acm程序的時候,我儘量避免使用map。雖然它的“天生有序”,使得它的查找效率很高;但是,在insert一個個map元素的時候,卻是比較花時間的!(No Free Lunch)我記得在acm編程中,使用map的代碼雖然很簡潔,但是給時間上造成的負擔,往往令我程序超時。
當然,如果在項目中“插入”(也就是代碼中註釋的insert操作)不是頻繁操作,那麼每次操作慢一點無所謂;對於配置文件來說,頻繁讀取、定位,纔是最重要的。