请看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时间也许是一个很小的系数,而常数时间也许是一个很大的系数。
试一下这几个函数,下次你对顺序没有要求时,你就会想用哈希而不是红黑树了
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.