0.現(xiàn)狀,數(shù)據(jù)是個(gè)xml文件,每個(gè)節(jié)點(diǎn)對(duì)應(yīng)的結(jié)構(gòu)體有10個(gè)成員變量,共有2000多條數(shù)據(jù),用的std::map<string, struct>來(lái)保存,用map的find函數(shù)進(jìn)行搜索時(shí)的效率極
其低下,循環(huán)搜索30條數(shù)據(jù)竟然要20s+,搓死。
1.為什么這么慢?
最初懷疑是std::map的效率問(wèn)題,正考慮是否使用std::hast_map來(lái)替換,于是了解下兩者之間的差別:
std::map是個(gè)自平衡的紅黑樹(shù),他的效率是平均的
hash_map的是一個(gè)hash表,只要你的hash算法足夠唯一,你的效率可以達(dá)到O(1)
翻書(shū)時(shí)大牛就在旁邊,就問(wèn)了他,把情況和他一說(shuō)。他立刻點(diǎn)名:
用hash_map的效率確實(shí)會(huì)比map的高,但你的數(shù)據(jù)才2000多,兩者在這里數(shù)量級(jí)上的效率差異應(yīng)該很小。主要的問(wèn)題應(yīng)該在于你的map,你的map的value不是一個(gè)指針
,而是一個(gè)大結(jié)構(gòu)體,這會(huì)導(dǎo)致搜索時(shí)的內(nèi)存頻繁被交換出去,因而導(dǎo)致效率低下。
2.按照大牛的建議,修改,測(cè)試,消耗的時(shí)間由原來(lái)的20s+變成了0