请看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时间也许是一个很小的系数,而常数时间也许是一个很大的系数。
试一下这几个函数,下次你对顺序没有要求时,你就会想用哈希而不是红黑树了
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn