【发布时间】:2016-08-09 04:58:30
【问题描述】:
目前,我认为我最好的选择是使用std::set_intersection,然后检查较小输入的大小是否与set_intersection填充的元素数相同。
有没有更好的解决方案?
【问题讨论】:
标签: c++ subset set-intersection
目前,我认为我最好的选择是使用std::set_intersection,然后检查较小输入的大小是否与set_intersection填充的元素数相同。
有没有更好的解决方案?
【问题讨论】:
标签: c++ subset set-intersection
试试这个:
if (std::includes(set_one.begin(), set_one.end(),
set_two.begin(), set_two.end()))
{
// ...
}
关于includes()。
includes() 算法比较两个 排序后的序列并返回 true if 范围内的每个元素 [start2, finish2) 包含在范围内 [开始1,结束1)。它返回假 否则。 includes() 假设 序列使用排序 operator
运行
最多 ((finish1 - start1) + (finish2 - start2)) * 执行 2 - 1 次比较。
加上 O(nlog(n)) 用于对向量进行排序。没有比这更快的了。
【讨论】:
std::set,你可以使用std::set_difference