2017-09-10 62 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 - 當然可以;這是碰撞的定義。 –