如何识别 std::unordered_map 是否经历了哈希冲突?

Gre*_*reg 6 c++ stl unordered-map collision hash-collision

如何识别一个中的键是否std::unordered_map经历了哈希冲突?

也就是说,如何识别是否存在任何碰撞链?

小智 7

您可以使用存储桶接口及其bucket_size方法。

std::unordered_map<int, int> map;
bool has_collision = false;

for(size_t bucket = 0; bucket < map.bucket_count(); bucket++) {
    if(map.bucket_size(bucket) > 1) {
        has_collision = true;
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Revolver_Ocelot——当然可以;这就是碰撞的定义。 (3认同)
  • 可以使用简单的 if (map.bucket_count() &lt; map.size()) 来快速检查是否存在任何冲突,以避免在许多情况下出现 for 循环 (2认同)