C++ 什么';从std::set中删除元素集的最有效方法是什么?

C++ 什么';从std::set中删除元素集的最有效方法是什么?,c++,set,erase,C++,Set,Erase,我必须从std::set S中删除一些元素。我有一组要删除的元素,但并非所有元素都属于S。似乎我不能使用“擦除(迭代器优先,迭代器最后)”,因为根据 范围[first;last]必须是S中的有效范围。 我可以使用std::set_差异或引入另一个容器来执行任务,但从std::set中删除元素集的最有效方法是什么?如果对性能有疑问,请思考(例如,大O),如果thinking认为这很重要,请测量。如何最有效地执行操作可能取决于集合项类型及其比较函数,以及您对要删除的项有哪些了解,例如,它们是连续值吗

我必须从std::set S中删除一些元素。我有一组要删除的元素,但并非所有元素都属于S。似乎我不能使用“擦除(迭代器优先,迭代器最后)”,因为根据 范围[first;last]必须是S中的有效范围。
我可以使用std::set_差异或引入另一个容器来执行任务,但从std::set中删除元素集的最有效方法是什么?

如果对性能有疑问,请思考(例如,大O),如果thinking认为这很重要,请测量。如何最有效地执行操作可能取决于集合项类型及其比较函数,以及您对要删除的项有哪些了解,例如,它们是连续值吗?当您关心性能时,您确定需要对
std::set
进行排序,还是可以您可以使用
std::unordered_set
?在要删除的元素上循环,并调用
S.erase(值)
针对每一个项目。有效还是高效?@IInspectable Thank-edited。您也可以创建一组要删除的项目,然后根据第二组中的项目循环并删除第一组中的项目。对于您提到的基于散列(O(1))的数据结构,这是相当有效的