所以如果我有这两个数组:
int array1[] = {1, 2 ,3};
int array2[] = {1, 2, 3, 4, 5};
如何检查array1中的1, 2 and 3
是否在array2中? `
提前致谢。
答案 0 :(得分:5)
if (std::includes(std::begin(array2), std::end(array2),
std::begin(array1), std::end(array1)) {
// array2 includes array1
}
这需要对数组进行排序,而不是您的数组。此外,如果使用某些自定义比较器对它们进行排序,则必须将其传递给std::includes
。
值得指出的是,我使用你的阵列"错误"方式;算法期望它的第一个范围是更大的范围。
答案 1 :(得分:3)
您可以使用std::set_intersection
。但是,它需要使用相同的比较器对数组进行排序。
来自cppreference的例子:
std::vector<int> v1{1,2,3,4,5,6,7,8};
std::vector<int> v2{ 5, 7, 9,10};
std::sort(v1.begin(), v1.end());
std::sort(v2.begin(), v2.end());
std::vector<int> v_intersection;
std::set_intersection(v1.begin(), v1.end(),
v2.begin(), v2.end(),
std::back_inserter(v_intersection));
for(int n : v_intersection)
std::cout << n << ' ';