如何检查一个向量是否是另一个向量的子集?

时间:2010-11-01 10:34:38

标签: c++ subset set-intersection

目前,我认为我最好的选择是使用std :: set_intersection,然后检查较小输入的大小是否与set_intersection填充的元素数相同。

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:37)

试试这个:

if (std::includes(set_one.begin(), set_one.end(),
                  set_two.begin(), set_two.end()))
{
// ...
}

关于includes()

  

includes()算法比较两个   排序的序列,如果,则返回true   范围内的每个元素[start2,   finish2)包含在范围内   [start1,finish1)。它返回false   除此以外。 includes()假设   序列使用   运算符<(),或使用谓词   可比。

中运行
  

最多((finish1 - start1)+(finish2    - start2))* 2 - 1次比较。

Plus O(nlog(n))用于排序向量。你不会比这更快。