C++:如何通过删除多个元素来剥离“集合”?

Tro*_*yvs 3 c++ algorithm stl function set

在STL算法中,有几个“设置”操作,例如set_union、set_difference、set_intersection、set_symmetry_difference\xef\xbc\x8c,但我希望在2个向量之间执行:

\n\n
vector<int> A={1,2,3,4};\nvector<int> B={1,3};\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望得到AB,所以AB={2,4}。

\n\n

有没有一种方便的方法来执行此“减”操作?\n谢谢!

\n

BoB*_*ish 5

只要 a已排序,您绝对可以set_在 a 上使用算法。然后您可以使用将输出推送到另一个:vectorvectorback_inserter()vector

#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
int main() {
    std::vector<int> v1 {1, 2, 3, 4};
    std::vector<int> v2 {1, 3};
    std::vector<int> out;
    std::set_difference(std::begin(v1), std::end(v1), // the first vector...
                        std::begin(v2), std::end(v2), // ...minus the second...
                        std::back_inserter(out));     // ...is stored into here
    for(auto i : out) std::cout << i << ' ';
}
Run Code Online (Sandbox Code Playgroud)

印刷:

2 4
Run Code Online (Sandbox Code Playgroud)

(请注意,此版本假设它可以使用比较元素<,并且元素是根据该元素进行排序的 - 这在您的情况下显然没问题)。