установить пересечение — проблема с set_union и set_intersection

В настоящее время я работаю над проектом, включающим набор расчетов. Я использую функции set_union и set_intersection для вычисления объединения и пересечения множеств. Мои переменные:

    int AunionB[8];
int AunionC[7];                     // define AunionC
int BunionD[9];                     // define BunionD
int AintersectB[4];                 // define AintersectB
int AintersectC[3];                 // define AintersectC
set<int> finalUnion;                // final union of A, B, C, D
set<int> finalIntersection;         // final intersection of A, B, C, D

Это объединения и пересечения, соответственно, четырех наборов: setA, setB, setC и setD. Моя функция set_union выглядит следующим образом:

    set_union(AunionC, AunionC+7, BunionD, BunionD+9, finalUnion.begin());

И моя функция set_intersection выглядит следующим образом:

    set_intersection(AintersectB, AintersectB+4, AintersectC,
AintersectC+3, finalIntersection.begin());

Когда я компилирую, я получаю ошибку «Требуется отсюда», в смысле которой я не уверен. Может кто-нибудь помочь мне с этим? Я считаю, что это как-то связано с функциями set_union и set_intersection и их параметрами, но я не уверен.

0

Решение

Используйте вместо

#include <iterator>

//...

set_union( AunionC, AunionC+7, BunionD, BunionD+9,
std::inserter( finalUnion, finalUnion.begin() ) );

а также

set_intersection(AintersectB, AintersectB+4, AintersectC,
AintersectC+3, std::inserter( finalIntersection,  finalIntersection.begin() ) );

Наглядный пример

#include <iostream>
#include <algorithm>
#include <iterator>
#include <set>int main()
{
int a[] = { 1, 3, 5 };
int b[] = { 0, 2, 4, 6 };
std::set<int> s;

std::set_union( std::begin( a ), std::end( a ),
std::begin( b ), std::end( b ),
std::inserter( s, s.begin() ) );

for ( int x : s ) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}

Выход

0 1 2 3 4 5 6
1

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


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