Когда в двух массивах есть общие элементы, всегда ли std set_union
берет эти общие элементы из первого массива? Из приведенного ниже фрагмента кода видно, что он всегда выбирает общие элементы из первого массива, но гарантируется ли это? Как заставить его ковыряться со второго.
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
struct Foo
{
Foo(int i, const std::string& n): id(i), name(n){}
int id;
std::string name;
};
bool comp(const Foo& first, const Foo& second)
{
return first.id < second.id;
}
int main()
{
Foo foo5A(5, "A");
Foo foo10A(10, "A");
Foo foo15A(15, "A");
Foo foo20A(20, "A");
Foo foo25A(25, "A");
Foo fooA[] = {foo5A, foo10A, foo15A, foo20A, foo25A};
Foo foo10B(10, "B");
Foo foo20B(20, "B");
Foo foo30B(30, "B");
Foo foo40B(40, "B");
Foo foo50B(50, "B");
Foo fooB[] = {foo10B, foo20B, foo30B, foo40B, foo50B};
std::vector<Foo> fooUnion;
std::set_union(fooA, fooA+5, fooB, fooB+5, std::back_inserter(fooUnion), comp);
for(const auto& f : fooUnion)
{
std::cout << f.id << ":" << f.name << std::endl;
}
}
Результат:
5:A
10:A
15:A
20:A
25:A
30:B
40:B
50:B
std::set_union
ссылка должна быть полезной. - person Some programmer dude   schedule 19.04.2017