unordered_map<>
(c++11) 使用散列函数在内部组织它的键值。碰撞概率很小(1.f/std:numeric_limits<size_t>::max()
).
可以使用 unordered_map<>
吗?作为堆内存管理的存储容器?也就是说,如果两个元素混淆(通过碰撞),程序的稳定性就会被破坏。在我的例子中,这将导致重复调用 free()
在同一个指针上。 (SIGSEGV
)。
或者碰撞概率仅在搜索 key 时才重要。并且保证两个不同的键总是引用不同的值?
跟进问题:说 unordered_map
其标准哈希函数不适合我的应用程序。如果想确保不会发生 碰撞,则可以将自己限制在最大值 size_t
。元素,是否可以提供她自己的哈希函数来返回参数本身。像这样的东西:
template<class T>
struct Hash
{
size_t operator()(T t) {
return (size_t)t;
}
}
并确保没有碰撞?
最佳答案
碰撞只会影响性能,不会影响容器的内容。 unordered_map
采用散列函数和 相等函数。两个元素可以安全地具有相同的哈希值,如果它们比较不相等,那么它们将被视为不相等。他们将永远在同一个哈希桶中。大桶会损害在该桶中查找的操作的性能。
关于c++ - unordered_map 用于堆管理系统。是否可以进行无碰撞设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10751527/