簡體   English   中英

需要幫助了解 unordered_map 的兩種用法之間的區別

[英]Need help to understand difference between two usages of unordered_map

我正在解決一個問題,我編寫了如下兩段代碼。 注意:'mp' 是一個已經填充的 unordered_map<int,int>。

1.

for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
 ans+=mp[A[i]+B[j]]; // did this because, if A[i]+B[j] doesn't exist, mp[A[i]+B[j]]=0.
}
for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    {
    auto it=mp.find(A[i]+B[j]);
    if(it!=mp.end())
        ans+=it->second;
    }

現在 sol2 比 sol1 給了我大約 140 毫秒的加速,這不是因為在不同時間提交時的運行時間不同。 這個增量保持不變,我不明白,為什么會這樣? 兩個代碼都執行相同的操作,將 A[i]+B[j](如果存在)的映射值添加到“ans”。

第一段代碼不僅僅是

將 A[i]+B[j] 的映射值(如果存在)添加到“ans”

還要將該密鑰插入值為 0 的 map 中。這不僅需要時間,而且 map 將更大以進行下一次查找,因此它們可能需要更多時間,特別是如果A[i]+B[j]的哈希值A[i]+B[j]可以相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM