堆管理系统的unordered_map.是否可以进行无碰撞设置

unordered_map for heap management system. Is a no-collision setup possible?

本文关键字:设置 碰撞 是否 管理系统 unordered map      更新时间:2023-10-16

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

是否可以将unordered_map<>用作堆内存管理的存储容器?也就是说,如果两个元素混淆(通过碰撞),程序的稳定性就会被破坏。就我而言,这将导致在同一指针上反复调用free()。(SIGSEGV)。

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

后续问题:假设具有标准哈希函数的unordered_map不适合我的应用程序。如果一个人想确保不会发生冲突,并且可以将自己限制为最多size_t个元素,是否可以提供自己的哈希函数来返回参数本身。像这样:

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

并确保没有碰撞?

冲突仅影响性能,而不影响容器的内容。 unordered_map采用哈希函数相等函数。两个元素可以安全地具有相同的哈希值,如果它们比较不相等,则它们被视为不相等。它们将始终在同一个哈希桶中。大型存储桶会损害在该存储桶中查找的操作的性能。