Проверьте, находятся ли элементы в массиве внутри другого массива

#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:

std::includes :

 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 << ' ';
 

живая демонстрация