需要帮助了解 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 的两种用法之间的区别的主要内容,如果未能解决你的问题,请参考以下文章