STL容器[28]交集、并集、差集
2012-05-22 04:28
274 查看
转载自:/article/6732776.html
STL对集合操作有标准的算法,有没有用过呢?使用它们的时候有需要注意什么?例子程序?如果没接触过,请看这里的简单介绍:交集set_intersection、并集set_union、差集set_difference、对称差集set_symeetric_difference。
针对这里提及的四个集合运算必须特别注意:
1、第一个算法需保证第一集合和第二集合有序,并从小到大排序,内部使用默认“<”操作符比较元素大小;
2、第二个算法需保证第一集合和第二集合有序,排序方式参照Compare确定,内部使用Compare比较元素大小。
1 -- set_intersection(交集)
该函数用于求两个集合的交集,结果集合中包含所有同时属于第一个集合和第二个集合的元素。例如:集合{1,2,3,7,9}和{3,4,5,7}的交集为{3,7}。
函数返回值:结果集合的结束位置迭代器。
参数:第一个集合的开始位置,第一个集合的结束位置,第二个参数的开始位置,第二个参数的结束位置,结果集合的插入迭代器。对于第二个算法,Compare指定用于比较元素大小的仿函数。
2 -- set_union(并集)
该函数用于求两个集合的交集,结果集合中包含所有同时属于第一个集合和第二个集合的元素。例如:集合{1,2,3,7,9}和{3,4,5,7}的并集为{1,2,3,4,5,7}。
3 -- set_difference(差集)
该函数用于求两个集合的差集,结果集合中包含所有属于第一个集合但不属于第二个集合的元素。例如:集合{1,2,3,7,9}和{3,4,5,7}的差集为{1,2,9}。
4 -- set_symeetric_difference(对称差集)
数学上,两个集合的对称差集是只属于其中一个集合,而不属于另一个集合的元素组成的集合。也就是说对称差集是去除同时出现在两个集合中的元素后,两集合其他元素组成的集合。例如:集合{1,2,3,7,9}和{3,4,5,7}的对称差为{1,2,4,5,9}。集合论中的这个运算相当于布尔逻辑中的异或运算。集合A和B的对称差通常表示为AΔB。
5 -- 交集、合集、差集、对称差集使用方法
STL对集合操作有标准的算法,有没有用过呢?使用它们的时候有需要注意什么?例子程序?如果没接触过,请看这里的简单介绍:交集set_intersection、并集set_union、差集set_difference、对称差集set_symeetric_difference。
针对这里提及的四个集合运算必须特别注意:
1、第一个算法需保证第一集合和第二集合有序,并从小到大排序,内部使用默认“<”操作符比较元素大小;
2、第二个算法需保证第一集合和第二集合有序,排序方式参照Compare确定,内部使用Compare比较元素大小。
1 -- set_intersection(交集)
template <class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result); template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp);
该函数用于求两个集合的交集,结果集合中包含所有同时属于第一个集合和第二个集合的元素。例如:集合{1,2,3,7,9}和{3,4,5,7}的交集为{3,7}。
函数返回值:结果集合的结束位置迭代器。
参数:第一个集合的开始位置,第一个集合的结束位置,第二个参数的开始位置,第二个参数的结束位置,结果集合的插入迭代器。对于第二个算法,Compare指定用于比较元素大小的仿函数。
2 -- set_union(并集)
template <class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator set_union(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result); template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> OutputIterator set_union(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp);
该函数用于求两个集合的交集,结果集合中包含所有同时属于第一个集合和第二个集合的元素。例如:集合{1,2,3,7,9}和{3,4,5,7}的并集为{1,2,3,4,5,7}。
3 -- set_difference(差集)
template <class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result); template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp)
该函数用于求两个集合的差集,结果集合中包含所有属于第一个集合但不属于第二个集合的元素。例如:集合{1,2,3,7,9}和{3,4,5,7}的差集为{1,2,9}。
4 -- set_symeetric_difference(对称差集)
template<class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result); template<class InputIterator1, class InputIterator2, class OutputIterator, class Compare> OutputIterator set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp);
数学上,两个集合的对称差集是只属于其中一个集合,而不属于另一个集合的元素组成的集合。也就是说对称差集是去除同时出现在两个集合中的元素后,两集合其他元素组成的集合。例如:集合{1,2,3,7,9}和{3,4,5,7}的对称差为{1,2,4,5,9}。集合论中的这个运算相当于布尔逻辑中的异或运算。集合A和B的对称差通常表示为AΔB。
5 -- 交集、合集、差集、对称差集使用方法
#include #include template void print_vector(const std::string & s_name, const std::vector & vec) { typedef typename std::vector::size_type size_type; std::cout << s_name << ": "; for (size_type i = 0; i < vec.size(); i++) std::cout << vec[i] << (i == vec.size() - 1?"\n":","); } int main() { int a[] = {1,2,3,7,9}; std::vector v_less_1(a, a + 5); int b[] = {3,4,5,7}; std::vector v_less_2(b, b + 4); std::vector vr_less; std::set_intersection(v_less_1.begin(), v_less_1.end(), v_less_2.begin(), v_less_2.end(), std::insert_iterator<std::vector >(v_less, v_less.begin())); print_vector("v_less", v_less); std::vector vr_less; std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::insert_iterator<std::vector >(v_less, v_less.begin()), std::less()); print_vector("v_less", v_less); std::vector v_greater; std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::insert_iterator<std::vector >(v_greater, v_greater.begin()), std::greater()); print_vector("v_greater", v_greater); return 0; }
相关文章推荐
- STL容器[28]交集、并集、差集
- stl 中 容器 set 类基础运算 交集 并集 差集 (2)
- STL集合的并集、交集、差集、对称差集
- STL常用算数生成方法(fill , accumulate,交集,并集,差集)
- STL算法-交集,并集,差集,对称差
- STL算法-交集,并集,差集,对称差
- STL 并集 交集 差集
- java容器取交集、并集、补集、差集示例
- STL之交集、并集、差集
- STL之交集、并集、差集
- STL算法交集、并集、差集
- STL算法-交集,并集,差集,对称差
- STL之交集、并集、差集
- STL 算法vector/set集合-交集,并集,差集,对称差
- SQL 操作结果集 -并集、差集、交集、结果集排序
- Linux 两个文件求交集、并集、差集
- mysql中交集,并集,差集,左连接,右连接
- 两数组并集交集差集
- 求两个数组的交集、并集和差集算法分析与实现
- 使用cloudera impala sql 进行交集、并集、差集查询