我有类似以下的逻辑:
std::map <cv::Point, bool, ComparisonStruct> m;
std::map <cv::Point, bool, ComparisonStruct> m2;
m = ... // assign some key values
for (auto &el : m) {
// do some logic
f(m); // <-- may append new key / values to m
g(m2) // <--- may remove key/vals from m2
}
当我添加f逻辑时,for循环不再终止。我不允许这样做吗?设置这样的最干净的方法是什么?我以为您可以做到这一点,并且最终el将是f附加的新键/值。
如果我尝试通过调用类似
erase
之类的东西(其中m2.erase(p)
是p
)来尝试从m2和cv::Point
,则循环也不会终止
最佳答案
遍历时最好不要将键/值添加到循环中。这将使迭代器无法正常运行。
一种简单的解决方法是先将键/值放入 vector 中,然后在另一个循环中将其转移到 map 中。
关于c++ - 在foreach循环中附加到 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61051363/