C++ std set_union是否总是从第一个

C++ std set_union是否总是从第一个,c++,stl,set-union,C++,Stl,Set Union,当两个数组中有公共元素时,stdset_union是否总是从第一个数组中获取这些公共元素?从下面的代码片段可以看出,它总是从第一个数组中选取公共元素,但这能保证吗?如何让它从第二个选择 #include <algorithm> #include <vector> #include <string> #include <iostream> struct Foo { Foo(int i, const std::string& n): id

当两个数组中有公共元素时,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;    
  }  
}

是的,根据参考资料:

两个集合的并集是由其中一个集合或两个集合中的元素组成的。第二个范围中的图元如果在第一个范围中具有等效图元,则不会复制到结果范围中

如果要从第二个(fooB)中选择,可以交换参数:

std::set_union(fooB, fooB+5, fooA, fooA+5, std::back_inserter(fooUnion), comp);
应该会有帮助。
std::set_union(fooB, fooB+5, fooA, fooA+5, std::back_inserter(fooUnion), comp);