STL set中有set_union(取两集合并集)、set_intersection(取两集合交集)、set_difference(取两集合差集)。
1、这几个函数的参数一样。
2、set_union(x1.begin(), x1.end(), x2.begin(), x2.end(), inserter(x, x.begin())),前两个参数是集合x1的头尾,再依次是集合x2的头尾,最后一个参数就是将集合x1和集合x2取合集后存入集合x中。
当使用set_intersection()规定两个区间必须是有序的。
具体介绍如下:
set_intersection
两个排序范围的交点
构造一个从result指向的位置开始的排序范围,以及两个排序范围的集合交集。 两组的交集仅由两组中存在的元素形成。函数复制的元素始终来自第一个范围,顺序相同。 使用第一个版本的元素和第二个版本的comp进行比较。两个元素,[first1,last1)
[first2,last2)
operator<
一个 和 b如果(!(a<b) && !(b<a))
或如果,则视为等效(!comp(a,b) && !comp(b,a))
。
范围内的元素必须按照相同的标准(operator<
或comp)进行排序。结果范围也根据此进行排序。(即两个集合的排列大小的顺序必须相同)
此函数模板的行为等效于:
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_intersection (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result)
{
while (first1!=last1 && first2!=last2)
{
if (*first1<*first2) ++first1;
else if (*first2<*first1) ++first2;
else {
*result = *first1;
++result; ++first1; ++first2;
}
}
return result;
}
参数
first1,last1
将迭代器输入到第一个排序序列的初始位置和最终位置。使用的范围是[first1,last1)
,包含first1和last1之间的所有元素,包括first1指向的元素,但不包括last1指向的元素。
first2,last2
将迭代器输入到第二个排序序列的初始位置和最终位置。使用的范围是[first2,last2)
。
结果
将迭代器输出到存储结果序列的范围的初始位置。
指向类型应支持从第一个范围分配元素的值。
参数
first1,last1
将迭代器输入到第一个排序序列的初始位置和最终位置。使用的范围是[first1,last1)
,包含first1和last1之间的所有元素,包括first1指向的元素,但不包括last1指向的元素。
first2,last2
将迭代器输入到第二个排序序列的初始位置和最终位置。使用的范围是[first2,last2)
。
结果
将迭代器输出到存储结果序列的范围的初始位置。
指向类型应支持从第一个范围分配元素的值。
返回值
构造范围末尾的迭代器。
// set_intersection example
#include <iostream> // std::cout
#include <algorithm> // std::set_intersection, std::sort
#include <vector> // std::vector
int main () {
int first[] = {5,10,15,20,25};
int second[] = {50,40,30,20,10};
std::vector<int> v(10); // 0 0 0 0 0 0 0 0 0 0
std::vector<int>::iterator it;
std::sort (first,first+5); // 5 10 15 20 25
std::sort