如何将(某些)项从一个std :: map高效地移动到另一种(在c ++ 17中?)>

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

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

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

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

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