#c #arrays
#c #массивы
Вопрос:
Итак, если у меня есть эти два массива:
int array1[] = {1, 2 ,3};
int array2[] = {1, 2, 3, 4, 5};
Как мне проверить, находятся ли 1, 2 and 3
данные из array1 в array2? `
Заранее благодарю.
Комментарии:
1. Вы знаете, что код Python на самом деле неправильный?
2. @UnholySheep, вероятно, так и есть. Так долго не касался python.
3. В этом случае вам, вероятно, следует полностью удалить это утверждение о Python, поскольку оно вводит в заблуждение (и на самом деле прямо неверно — Python не имеет встроенного синтаксиса для проверки, является ли один список частью другого).
Ответ №1:
if (std::includes(std::begin(array2), std::end(array2),
std::begin(array1), std::end(array1)) {
// array2 includes array1
}
Для этого требуется, чтобы массивы были отсортированы, как и ваши. Кроме того, если они отсортированы с помощью какого-либо пользовательского компаратора, вы std::includes
также должны передать его.
Стоит отметить, что я использую ваши массивы «неправильным» способом; алгоритм ожидает, что его первый диапазон будет большим.
Комментарии:
1. Спасибо, выглядит простым в использовании.
Ответ №2:
Вы можете использовать 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 << ' ';