0

( unordered_map<>c++11) 使用哈希函数在内部组织它的键值。碰撞概率很小(1.f/std:numeric_limits<size_t>::max())。

可以将 anunordered_map<>用作堆内存管理的存储容器吗?也就是说,如果两个元素混合在一起(通过碰撞),程序的稳定性就会被破坏。在我的情况下,这将导致重复调用free()同一个指针。( SIGSEGV)。

或者碰撞概率仅在搜索密钥时才重要。并且保证两个不同的键总是引用不同的值?

后续问题:说它的unordered_map标准哈希函数不适合我的应用程序。如果想确保不会发生冲突,并且可以将自己限制为最多size_t元素,那么可以提供自己的哈希函数来返回参数本身。就像是:

template<class T>
struct Hash
{
  size_t operator()(T t) {
    return (size_t)t;
  }
}

并确保没有碰撞?

4

1 回答 1

5

碰撞只会影响性能,不会影响容器的内容。unordered_map接受一个哈希函数一个相等函数。两个元素可以安全地具有相同的哈希值,如果它们比较不相等,则它们被视为不相等。它们总是在同一个哈希桶中。大桶会损害在该桶中查找的操作的性能。

于 2012-05-25T09:20:22.523 回答