我有两个std::map<>
对象a
和b
,并希望根据某些谓词extract
将某些元素(节点)从一个映射移动(insert
+ p
)到另一个映射。] >
for (auto i = a.begin(); i != a.end(); ++i) if (p(*i)) b.insert(a.extract(i))
此代码适用于gcc,但适用于clang中的段错误。我认为问题是从[a]中提取了节点后
i
的增量。为什么这似乎在gcc中起作用但在clang中不起作用?
是通过后增量解决此问题的正确/唯一方法吗?
for (auto i = a.begin(); i != a.end();) if (p(*i)) b.insert(a.extract(i++)) else ++i;
我有两个std :: map <>对象a和b,并希望基于某些谓词p将一些元素(节点)从一个映射移动(提取+插入)到另一个映射。对于(auto i = a.begin(); i!= a.end(); ...
我认为问题是从a提取节点后i的增量。