请看stack overflow的答案c++ - Is there any advantage of using map over unordered_map in case of trivial keys? 答案主要是: 1、map是有序的,unordered_map是无序的 2、两者之间的查找速度不同(log(N)和N) 3、由于hash要控制负载率在0-1之间,所以unordered_map消耗空间更大。 具体的时间与空间消耗:
Hash是普通dictionary抽象数据类型的一种实现,RBT是ordered dictionary抽象数据类型的一种实现。普通dictionary只支持search、insert、delete,ordered dictionary除了那三个操作外,还支持一些导航类的操作,如和一个给定key最邻近的key,最大key、最小key这些操作。 两种dictionary的实现各有适用场景。
可能当初定C++标准库的时候,hash table还不流行。现在11的标准库加入了基于hash的unordered_set和unordered_map。 另外,光看所谓的算法复杂度是不够的。log时间也许是一个很小的系数,而常数时间也许是一个很大的系数。
试一下这几个函数,下次你对顺序没有要求时,你就会想用哈希而不是红黑树了