如何将(某些)项从一个std :: map高效地移动到另一个?

问题描述 投票:8回答:1

我有两个std::map<>对象ab,并希望根据某些谓词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(); ...

c++ stl c++17 stdmap
1个回答
6
投票

我认为问题是从a提取节点后i的增量。

© www.soinside.com 2019 - 2024. All rights reserved.