【问题标题】:C++ STL Map gives TLE when looping with auto?C++ STL Map 在自动循环时给出 TLE?
【发布时间】:2022-12-31 13:53:46
【问题描述】:

我在 CodeForces 上处理 this 问题。我的解决方案是给予 TLE,但我不知道为什么。最终我将其缩小到故障线,它基本上是以下内容

// map<int, set<long long>> res;
for(auto z : res) if(res[z.first].count(x)) res[z.first].erase(x);

这在测试用例 6 上给出了 TLE。现在我的 res 映射最多有三个键 (1,2,3)。如果我将循环更改为 -

for(int j = 1; j<=3; j++) if(res[j].count(x)) res[j].erase(x);

然后该解决方案适用于所有测试用例并运行。我想了解为什么第一个循环不起作用,以及如何知道什么时候可以使用该循环,什么时候不能?

Link 提交给 TLE。 Link 更正提交。唯一不同的是第 81-82 行。

【问题讨论】:

  • 所有那些令人困惑的宏和名称让我很难过。
  • 嘿,我正在从地图中的集合中删除一个元素。链接中的海报在遍历地图时正在删除地图中的元素。

标签: c++ loops dictionary stl auto


【解决方案1】:
for(auto z : res)

它将内部映射复制到 z 对每个循环迭代。尝试

for(auto& z : res)

【讨论】:

  • 这奏效了!我不知道它在每次迭代时都将整个地图复制到 z 。谢谢!
猜你喜欢
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 2011-02-04
相关资源
最近更新 更多