大家用了stl的list后都知道,他的節(jié)點(diǎn)在內(nèi)存中的位置是固定的,但是當(dāng)刪除或查找某個(gè)指定節(jié)點(diǎn)時(shí)需要遍歷,這樣當(dāng)list很大時(shí),這個(gè)遍歷過程未免有些性能詬病。當(dāng)然大家會(huì)很容易想到hash_map,但是hash_map在節(jié)點(diǎn)數(shù)超過一定數(shù)量后也會(huì)進(jìn)行“擴(kuò)容”操作,這樣存在大量的對(duì)象的搬遷。我們看看list的特點(diǎn):結(jié)構(gòu)簡(jiǎn)單,節(jié)點(diǎn)的內(nèi)存地址固定,添加刪除操作快捷;再看看hash_map的特點(diǎn):查找速度快,節(jié)點(diǎn)的內(nèi)存地址可能不固定(依賴是否擴(kuò)容),如果我們將兩者結(jié)合可以解決某些特殊應(yīng)用場(chǎng)合(指那些可能需要記錄節(jié)點(diǎn)內(nèi)存位置的場(chǎng)合)。用一個(gè)list和一個(gè)hash_map來管理一個(gè)數(shù)據(jù)列表,list記錄具體的節(jié)點(diǎn)的數(shù)據(jù),hash_map用于記錄list的迭代器地址,這樣需要查找一個(gè)鍵值為key的對(duì)象在list中的節(jié)點(diǎn)時(shí),可以通過hash_map來進(jìn)行定位,具體性能如何沒有測(cè)試過,應(yīng)該不會(huì)比list的直接遍歷查找慢,大家可以自己試試。