【发布时间】:2019-04-10 22:14:10
【问题描述】:
在 C++ 中使用 std::set,我能找到从集合中删除项目的唯一方法是使用擦除方法。这会删除有问题的项目,我不希望发生这种情况。我能想到的从集合中删除一个项目而不删除它的唯一方法是创建一个新集合并迭代地将旧集合的所有项目添加到其中,确保不添加需要从中删除的项目集,然后删除旧集。
有没有更简洁的方法来做到这一点?
【问题讨论】:
-
困惑因为:方法(1)和方法(2)都删除了有问题的项目。
-
假设您确实创建了一个新集。您将如何将任何现有项目移入其中?如果您的意思是从字面上使用移动语义,那将意味着删除旧项目,这是您说您不想做的事情。如果不移动语义,它会在什么意义上移动?
-
准确理解为什么不希望删除原始对象会很有帮助。如果是因为,例如,你在某处隐藏了对它的引用,而不是因为它的构建成本很高,那么它会产生巨大的差异。
-
不清楚你的意思。您可以将项目复制到另一个位置(如矢量),然后将其从集合中删除。您仍在删除原始值,但您在另一个容器中拥有该值的副本。这是你的意思吗?