我有两个std::map<>
对象a
和b
,并希望根据某些谓词extract
将某些元素(节点)从一个映射移动(insert
+ p
)到另一个映射。] >
for (auto i = a.begin(); i != a.end(); ++i) if (p(*i)) b.insert(a.extract(i))
此代码段用c发出。我认为问题是从[a]中提取了其节点后
i
的增量。是使用后增量来解决此问题的正确/唯一方法吗,例如:
for (auto i = a.begin(); i != a.end();) if (p(*i)) b.insert(a.extract(i++)) else ++i;
EDIT
:我删除了有关“为什么在gcc中起作用?”的部分,因为我无法在当前设置中重现此内容。我确信它曾经在某个时间点使用过,但是在gcc 9.2.1中,我遇到了死锁(而不是段错误)。无论哪种方式,在extract()
无效后递增。
我有两个std :: map <>对象a和b,并希望基于某些谓词p将一些元素(节点)从一个映射移动(提取+插入)到另一个映射。对于(auto i = a.begin(); i!= a.end(); ...
我认为问题是从a提取节点后i的增量。