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

Posted

技术标签:

【中文标题】需要帮助了解 unordered_map 的两种用法之间的区别【英文标题】:Need help to understand difference between two usages of unordered_map 【发布时间】:2020-12-18 02:12:03 【问题描述】:

我正在解决一个问题,我编写了如下两段代码。 注意:'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'。

【问题讨论】:

请注意,似乎存在格式错误 - 请参阅this post on Meta。 【参考方案1】:

第一段代码不只是

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

还可以将该键插入到值为 0 的映射中。这不仅本身需要时间,而且下次查找时映射会更大,因此可能需要更多时间,尤其是在 A[i]+B[j] 的哈希值时可以一样。

【讨论】:

谢谢我现在明白了。

以上是关于需要帮助了解 unordered_map 的两种用法之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

do...while和while...do的两种场景比较

java中类加载的两种方法是啥?

.NET的两种部署模式,了解一下

Android四大组件之服务的两种启动方式详解

浅谈Spring的两种配置容器

CAD图纸的两种格式如何进行互转?