目前,我认为我最好的选择是使用std :: set_intersection,然后检查较小输入的大小是否与set_intersection填充的元素数相同。
有更好的解决方案吗?
答案 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))用于排序向量。你不会比这更快。