既然std
在unordered_map
中有了一个真正的哈希图,为什么(或者什么时候)我还想在实际存在的系统上使用老的map
而不是unordered_map
呢?有没有什么明显的情况是我不能立即看到的?
发布于 2010-10-11 07:32:06
我认为很明显,您将使用按排序顺序遍历映射中的项所需的std::map
。
当您更喜欢编写比较运算符(这是直观的)而不是哈希函数(通常非常不直观)时,也可以使用它。
发布于 2016-08-20 04:22:46
假设你有非常大的键,也许是很大的字符串。要为大字符串创建散列值,您需要从头到尾遍历整个字符串。它将花费至少线性时间到密钥的长度。但是,当您仅使用键的>
运算符搜索二叉树时,当发现第一个不匹配时,每个字符串比较都会返回。对于大型字符串,这通常是非常早的。
这一推理可应用于std::unordered_map
和std::map
的find
函数。如果键的性质使得生成散列(在std::unordered_map
中)所需的时间比使用二进制搜索(在std::map
中)查找元素的位置所需的时间更长,那么在std::map
中查找键应该更快。很容易想到这种情况,但我认为在实践中很少见。
https://stackoverflow.com/questions/3902644
复制相似问题