( 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;
}
}
并确保没有碰撞?