2017-09-10 53 views
3

如何识别std::unordered_map中的密钥是否发生散列冲突?如何识别std :: unordered_map是否遇到散列冲突?

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

+0

我怀疑你想强制执行一些策略,如果是这种情况,然后要求unordered_map强制它不要试图强制它从客户端代码。检查max_load_factor成员函数是否解决下面的问题。 –

回答

3

您可以使用bucket interface及其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; 
    } 
} 
+0

如果两个元素碰巧位于同一个存储桶中,这并不意味着存在散列冲突。 –

+2

@Revolver_Ocelot - 当然可以;这是碰撞的定义。 –