STL里面的map并不是哈希表,这对于习惯了MFC里面CMap的人可能有点不习惯。STL里面的map仅仅是棵红黑树。
除非你对程序的效率毫不关心,否则你就应该使用stlex里面的hash_map代替stl里面的map。因为他们做着非常类似的工作,而且他们的调用方法几乎一样。
hash_map需要对key取hash值,我想这应该不会是问题。我们在实际应用中,通常只会用数值、指针或者字符串作为key,这些东西都是很容易hash的。实际上,用object作为key反而容易出现问题,大多数人并不鼓励在C++里面用object做key。
说远一点,C#里面倒是非常开心的一直用object做着哈希表的key,这是为什么呢?这是因为C#是一个单根体系,所有的class都是从System.Object派生出来的,而System.Object实现了GetHashCode方法。这迫使C#中所有的对象,要么采用基类的GetHashCode方法,要么实现自己的GetHashCode方法。