C++ 有人能简明扼要地解释一下set#u union在c++;?

C++ 有人能简明扼要地解释一下set#u union在c++;?,c++,algorithm,C++,Algorithm,我对如何解释下一页中为set_union给出的代码感到困惑: 当函数返回时,算法如何确保结果保持两个集合的并集?例如,如果我们想找到以下列表的集合\并集: L1 L2 hi goodbye bye hello see hi two bye three hooray 假设每个列表的前面和后面都有一个迭代器,有人能给我介绍一下这种算法是如何工作的吗?关键信息是,算法假设元素在两个范围内都是有序的,因此在您的情况下: L1:

我对如何解释下一页中为set_union给出的代码感到困惑:

当函数返回时,算法如何确保结果保持两个集合的并集?例如,如果我们想找到以下列表的集合\并集:

L1        L2

hi        goodbye
bye       hello
see       hi
two       bye
three     hooray

假设每个列表的前面和后面都有一个迭代器,有人能给我介绍一下这种算法是如何工作的吗?

关键信息是,算法假设元素在两个范围内都是有序的,因此在您的情况下:

L1:  bye, hi, see, three, two
L2:  bye, goodbye, hello, hi, hooray
考虑到这一点,不难理解算法的作用

虽然这两个范围都包含元素,但将迭代器指向的最小元素添加到并集中,并使该迭代器前进。如果两个迭代器都引用同一个元素,则添加它并提升两个迭代器(您不希望插入两次)

其中一个范围为空后,只需将其他范围中的所有剩余元素复制到解决方案中


在这种情况下,插入
bye
并推进两个迭代器,插入
bye
并推进第二个迭代器,插入
hello
并推进第二个迭代器,插入
hi
并推进两个迭代器,插入
hooray
并推进第二个迭代器。现在,第二个范围为空,因此只需填写第一个范围中的剩余元素。

关键信息是,算法假设元素在两个范围中都是有序的,因此在您的情况下:

L1:  bye, hi, see, three, two
L2:  bye, goodbye, hello, hi, hooray
考虑到这一点,不难理解算法的作用

虽然这两个范围都包含元素,但将迭代器指向的最小元素添加到并集中,并使该迭代器前进。如果两个迭代器都引用同一个元素,则添加它并提升两个迭代器(您不希望插入两次)

其中一个范围为空后,只需将其他范围中的所有剩余元素复制到解决方案中


在这种情况下,插入
bye
并推进两个迭代器,插入
bye
并推进第二个迭代器,插入
hello
并推进第二个迭代器,插入
hi
并推进两个迭代器,插入
hooray
并推进第二个迭代器。现在,第二个范围为空,只需填写第一个范围中的其余元素即可。

您缺少一个关键的工作要求:必须对传入的两个范围进行排序。从您发布的链接:

set\u union
构造一个排序范围,从result指向的位置开始,用两个排序范围的集合并集
[first1,last1)
[first2,last2)


页面上显示的代码只是对两个预先排序的序列进行合并。

您缺少一个关键要求:您传入的两个范围都必须排序。从您发布的链接:

set\u union
构造一个排序范围,从result指向的位置开始,用两个排序范围的集合并集
[first1,last1)
[first2,last2)


页面上显示的代码只是对两个预先排序的序列进行合并。

您的两个范围未排序,这是“集合”算法所要求的。您的两个范围未排序,这是“集合”算法所要求的。