C ++ устанавливает пересечение и объединение с использованием массивов

Я должен найти количество объединений множеств и установить пересечение двух множеств из файла данных. Я создал два массива (setA [] и setB []) для хранения моих данных. a и b — количество элементов в наборе A и B соответственно. setIntersection должен содержать результат пересечения между множествами A и B. Но я застрял в том, как мне найти объединение и пересечение.

int printIntersection(int setA[], int setB[], int setIntersection[], int a, int b, int k)
{
int i = 0;
int j = 0;

while(i < a && j < b)
{
if(setA[i] < setB[j])
{
i++;
}

else if(setA[i] > setB[j])
{
j++;
}

else if (setA[i] == setB[j])
{
setIntersection[k] = setA[i];
i++;
j++;
k++;
}
cout<<"Cardinality of intersection is "<<k<<endl;
}

Этот код для пересечения, но я ничего не получаю. И я не знаю, с чего начать на союзе. может кто-нибудь помочь мне с кодом спасибо!
П.С. Мне разрешено использовать только массивы и простой алгоритм кода. Заранее спасибо!

0

Решение

использование станд :: set_union а также станд :: set_intersection, например

int *c = std::set_union(setA, setA + a, setB, setB + b, setC)
int *c = std::set_intersection(setA, setA + a, setB, setB + b, setC)

где setC является выходным массивом достаточного размера; c указывает на один из последних элементов построенного диапазона.

Если вы хотите кардинальности, c - setC это твой ответ.

Я бы порекомендовал использовать что-то вроде std::vector для представления и итераторов вместо массивов / указателей / длин в вызовах алгоритма.

Входные диапазоны предполагаются отсортированными; так и выход.

Если вы хотите сделать это самостоятельно, вы найдете «возможные реализации» по ссылкам выше.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]