c++ - 在foreach循环中附加到 map

标签 c++

我有类似以下的逻辑:

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/

相关文章:

C++ 库未在发布配置中链接 (VS2010)

c++ - SDL2 因 InputHandler 鼠标运动而崩溃

c++ - 求和未确定范围内的奇数和偶数

c++ - 如何从内存中删除二叉搜索树?

c++ - 编译OpenBLAS C++项目给出错误 “Undefined symbols for architecture x86_64”

c++ - 如何在 boost::spirit::qi 中捕获角色而不消耗它

c++ - 为什么建议包含googletest源文件

c++ - 如何结合使用 std::bind 和 std::shared_ptr

c++ - 无法 std::bind 成员函数

c++ - 从临时构造对象