C++ 使用多集容器设置_并集?

C++ 使用多集容器设置_并集?,c++,stl,containers,stl-algorithm,C++,Stl,Containers,Stl Algorithm,当一个或两个输入容器都是具有重复对象的多集时,算法std:set_union的返回是什么?DUP会迷路吗 例如,让我们假设: multiset<int> ms1; ms1.insert(1); ms1.insert(1); ms1.insert(1); ms1.insert(2); ms1.insert(3); multiset<int> ms2; ms2.insert(1); ms2.insert(1); ms2.insert(2); ms2.insert(2); m

当一个或两个输入容器都是具有重复对象的多集时,算法std:set_union的返回是什么?DUP会迷路吗

例如,让我们假设:

multiset<int> ms1;
ms1.insert(1);
ms1.insert(1);
ms1.insert(1);
ms1.insert(2);
ms1.insert(3);

multiset<int> ms2;
ms2.insert(1);
ms2.insert(1);
ms2.insert(2);
ms2.insert(2);
ms2.insert(4);

vector<int> v(10);
set_union( ms1.begin(), ms1.end(), ms2.begin(), ms2.end(), v.begin() );
multiset-ms1;
ms1.插入(1);
ms1.插入(1);
ms1.插入(1);
ms1.插入(2);
ms1.插入(3);
多集ms2;
ms2.插入(1);
ms2.插入(1);
ms2.插入(2);
ms2.插入(2);
ms2.插入(4);
向量v(10);
set_union(ms1.begin()、ms1.end()、ms2.begin()、ms2.end()、v.begin());
输出是什么?

来自(添加了强调)

在最简单的情况下,set_union执行集合论中的“union”操作:输出范围包含[first1,last1]、[first2,last2]中包含的每个元素的副本,或者两者都包含。一般情况更复杂,因为输入范围可能包含重复的元素。一般情况下,如果一个值在[first1,last1]和[first2,last2]中的n次(其中m或n可能为零),则它在输出范围中出现最大(m,n)次。[1]Set_union是稳定的,这意味着每个输入范围内元素的相对顺序都会保持不变,并且如果两个输入范围中都存在一个元素,那么它将从第一个范围而不是第二个范围复制


它将出现
max(m,n)
次,其中
m
是它在
ms1
中出现的次数,
n
是它在
ms2
中出现的次数,标准25.3.5:

通过定义
union()
以包含每个元素的最大出现次数,定义
intersection()
以包含最小出现次数,以标准方式将集合操作的语义推广到多集合


在你的例子中,结果是(1,1,1,2,2,3,4,0,0,0),因为你初始化了长度为10的向量。

< P>从C++标准,第25.3.5/1:

本节定义了排序结构上的所有基本集合操作。它们也适用于包含多个等效元素副本的多集合(23.3.4)。集合操作的语义通过定义union()以包含每个元素交叉点()的最大出现次数,以标准方式推广到多集合包含最小值,等等