需要帮助来理解 unordered_map 的两种用法之间的区别

Need help to understand difference between two usages of unordered_map

我在解决一个问题时写了两段代码如下。 注意:'mp' 是一个已经填充的 unordered_map.

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'.

第一段代码不只是

adding mapped value of A[i]+B[j] (if it exists) to 'ans'

但也将该键插入值为 0 的映射中。这不仅本身需要时间,而且下一次查找的映射会更大,因此它们可能需要更多时间,特别是如果 A[i]+B[j]可以一样。