c++ - unordered_map 用于堆管理系统。是否可以进行无碰撞设置?

标签 c++ c++11 unordered-map

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/

相关文章:

C++ Hook winsock

c++ - (c++) 如何有效地制作升序(dyn.solution)

c++ - QAbstractProxyModel 不更新 dataChanged() 信号

c++ - N2965 - std::bases 和 std::direct_bases 的状态如何?

c++ - 解释 Unresolved external C++

c++ - std::unordered_map::reserve 是否保证只要映射中的元素较少就不会发生内存分配?

sorting - 为什么 STL unordered_map 和 unordered_set 不能通过 STL 算法排序?

c++ - 在拼写检查器中使用 Levenshtein 距离

c++11 - 识别 Eigen 中的临时对象创建

c++ - 有什么方法可以初始化 unique_ptr 的 vector 吗?