在 C++ 中使用 std::set 时,我发现从集合中删除项目的唯一方法是使用擦除方法。这会删除有问题的项目,这是我不希望发生的情况。我能想到的从集合中删除项目而不删除它的唯一方法是创建一个新集合并迭代地将旧集合的所有项目添加到其中,确保不添加需要从中删除的项目集,然后删除旧集。
有没有更干净的方法来做到这一点?
您无法在不删除项目的情况下从集合中删除项目。集合拥有其成员。如果该成员从集合中删除,则该成员不再存在。如果您希望能够删除某些内容而不删除它,请不要将其添加到集合中。
想象一下,如果你有int x[5]; x[2]=2;。怎么才能x[2]出阵呢?这意味着什么?当然,您可以构造一个具有相同值的新整数int j = x[2];。但这是一个新对象(具有相同的值),不会延长现有对象的寿命。
根据您的外部问题是什么,可能会有解决方案。例如,您可以将 a 添加std::unique_ptr到集合中的对象,然后可以销毁该对象,而无需销毁它指向的对象,从而为同一基础对象std::unique_ptr构造新对象。std::unique_ptr