STL里面的map并不是哈希表,這對于習慣了MFC里面CMap的人可能有點(diǎn)不習慣。STL里面的map僅僅是棵紅黑樹(shù)。
除非你對程序的效率毫不關(guān)心,否則你就應該使用stlex里面的hash_map代替stl里面的map。因為他們做著(zhù)非常類(lèi)似的工作,而且他們的調用方法幾乎一樣。
hash_map需要對key取hash值,我想這應該不會(huì )是問(wèn)題。我們在實(shí)際應用中,通常只會(huì )用數值、指針或者字符串作為key,這些東西都是很容易hash的。實(shí)際上,用object作為key反而容易出現問(wèn)題,大多數人并不鼓勵在C++里面用object做key。
說(shuō)遠一點(diǎn),C#里面倒是非常開(kāi)心的一直用object做著(zhù)哈希表的key,這是為什么呢?這是因為C#是一個(gè)單根體系,所有的class都是從System.Object派生出來(lái)的,而System.Object實(shí)現了GetHashCode方法。這迫使C#中所有的對象,要么采用基類(lèi)的GetHashCode方法,要么實(shí)現自己的GetHashCode方法。
除非你對程序的效率毫不關(guān)心,否則你就應該使用stlex里面的hash_map代替stl里面的map。因為他們做著(zhù)非常類(lèi)似的工作,而且他們的調用方法幾乎一樣。
hash_map需要對key取hash值,我想這應該不會(huì )是問(wèn)題。我們在實(shí)際應用中,通常只會(huì )用數值、指針或者字符串作為key,這些東西都是很容易hash的。實(shí)際上,用object作為key反而容易出現問(wèn)題,大多數人并不鼓勵在C++里面用object做key。
說(shuō)遠一點(diǎn),C#里面倒是非常開(kāi)心的一直用object做著(zhù)哈希表的key,這是為什么呢?這是因為C#是一個(gè)單根體系,所有的class都是從System.Object派生出來(lái)的,而System.Object實(shí)現了GetHashCode方法。這迫使C#中所有的對象,要么采用基類(lèi)的GetHashCode方法,要么實(shí)現自己的GetHashCode方法。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=525824
[推薦本文] [點(diǎn)擊此處收藏本文] 發(fā)表于 2005年11月09日 10:16 AM

