设置C++的差异

use*_*189 16 c++ intersection set

如果我知道一个集合是另一个集合的子集,并且我想找到差异,那么最有效的方法是什么?

恩.PSEUDO CODE

> set<int> set1 = {1 2 3 4 5 6 7 8 9 10}
> set<int> set2 = {5 6 7}
Run Code Online (Sandbox Code Playgroud)

我想减去set2来自set1:

这里的答案是

{1 2 3 4 8 9 10}
Run Code Online (Sandbox Code Playgroud)

orl*_*rlp 26

使用std::set_difference<algorithm>:

#include <algorithm>
#include <set>
#include <iterator>
// ...
std::set<int> s1, s2;
// Fill in s1 and s2 with values
std::set<int> result;
std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(),
    std::inserter(result, result.end()));
Run Code Online (Sandbox Code Playgroud)

片段来源


Oli*_*rth 11

我会用std::set_difference,在O(n)时间运行.

  • @nightcracker:不,它是由标准保证的. (3认同)