如何在 C++ 中获取(无序)集合差异或对称差异?

Dim*_*ims 6 c++ set set-difference

我无法推断我可以使用文档中的std::set_difference,因为它说集合应该排序,这意味着它们不是集合,而是列表。此外,所有示例都是关于有序列表,而不是集合。

如何知道真相?

Sha*_*ger 10

std::set_difference用于任意排序的输入(预排序的std::vectors、std::lists、std::deques、普通数组等),它也恰好适用于std::set(已排序的)。

如果您正在使用std::unordered_set(或std::set,并且您可以就地操作),您只需使用该erase方法从一个这样的集合中删除另一个集合中的所有元素即可获得差异,例如:

for (const auto& elem : set_to_remove) {
    myset.erase(elem);
}
Run Code Online (Sandbox Code Playgroud)

您也可以将其放入新的集合std::copy_if;那里的配方可以轻松适应对称差异的情况(它只是对 的两次调用std::copy_if,其中每个调用都在一个输入集上运行,并且以其他输入集中不存在的元素为条件)。