STL算法---集合算法
2014-08-28 17:36
162 查看
集合算法
set_union / set_intersection / set_difference / set_symmetric_difference
相当于[first1, last1)和[first2, last2)的并集.
重载版本使用自定义的比较操作
函数原形
template<class InIt1, class InIt2, class OutIt> OutIt set_union(InIt1 first1, InIt1 last1, InIt2 first2, InIt2 last2, OutIt x);
template<class InIt1, class InIt2, class OutIt, class Pred> OutIt set_union(InIt1 first1, InIt1 last1,InIt2 first2, InIt2 last2,OutIt x, Pred pr);
相当于[first1, last1)和[first2, last2)的交集.
重载版本使用自定义的比较操作
函数原形
template<class InIt1, class InIt2, class OutIt> OutIt set_intersection(InIt1 first1, InIt1 last1,InIt2 first2, InIt2 last2, OutIt x);
template<class InIt1, class InIt2, class OutIt, class Pred> OutIt set_intersection(InIt1 first1, InIt1 last1,InIt2 first2,InIt2 last2, OutIt x, Pred pr);
相当于[first1, last1) - ([first1, last1)交[first2, last2))
重载版本使用自定义的比较操作
函数原形
template<class InIt1, class InIt2, class OutIt> OutIt set_difference(InIt1 first1, InIt1 last1,InIt2 first2, InIt2 last2, OutIt x);
template<class InIt1, class InIt2, class OutIt, class Pred> OutIt set_difference(InIt1 first1, InIt1 last1, InIt2 first2, InIt2 last2, OutIt x, Pred pr);
函数原形
template<class InIt1, class InIt2, class OutIt> OutIt set_symmetric_difference(InIt1 first1, InIt1 last1, InIt2 first2, InIt2 last2, OutIt x);
template<class InIt1, class InIt2, class OutIt, class Pred> OutIt set_symmetric_difference(InIt1 first1, InIt1 last1, InIt2 first2, InIt2 last2, OutIt x, Pred pr);
set_union / set_intersection / set_difference / set_symmetric_difference
1. set_union
构造一个有序序列,包含两个序列中所有的不重复元素。相当于[first1, last1)和[first2, last2)的并集.
重载版本使用自定义的比较操作
函数原形
template<class InIt1, class InIt2, class OutIt> OutIt set_union(InIt1 first1, InIt1 last1, InIt2 first2, InIt2 last2, OutIt x);
template<class InIt1, class InIt2, class OutIt, class Pred> OutIt set_union(InIt1 first1, InIt1 last1,InIt2 first2, InIt2 last2,OutIt x, Pred pr);
2. set_intersection
构造一个有序序列,其中元素在两个序列中都存在。相当于[first1, last1)和[first2, last2)的交集.
重载版本使用自定义的比较操作
函数原形
template<class InIt1, class InIt2, class OutIt> OutIt set_intersection(InIt1 first1, InIt1 last1,InIt2 first2, InIt2 last2, OutIt x);
template<class InIt1, class InIt2, class OutIt, class Pred> OutIt set_intersection(InIt1 first1, InIt1 last1,InIt2 first2,InIt2 last2, OutIt x, Pred pr);
3. set_difference
构造一个有序序列,该序列仅保留第一个序列中存在的而第二个中不存在的元素。相当于[first1, last1) - ([first1, last1)交[first2, last2))
重载版本使用自定义的比较操作
函数原形
template<class InIt1, class InIt2, class OutIt> OutIt set_difference(InIt1 first1, InIt1 last1,InIt2 first2, InIt2 last2, OutIt x);
template<class InIt1, class InIt2, class OutIt, class Pred> OutIt set_difference(InIt1 first1, InIt1 last1, InIt2 first2, InIt2 last2, OutIt x, Pred pr);
4. set_symmetric_difference
构造一个有序序列,该序列取两个序列的对称差集(并集-交集)函数原形
template<class InIt1, class InIt2, class OutIt> OutIt set_symmetric_difference(InIt1 first1, InIt1 last1, InIt2 first2, InIt2 last2, OutIt x);
template<class InIt1, class InIt2, class OutIt, class Pred> OutIt set_symmetric_difference(InIt1 first1, InIt1 last1, InIt2 first2, InIt2 last2, OutIt x, Pred pr);
///////////////////////////////////////////////////////////// #include "stdafx.h" #include <algorithm> #include <numeric> #include <functional> #include <vector> #include <iostream> int _tmain(int argc, _TCHAR* argv[]) { std::vector<int> nV2, nV1; std::vector<int>::iterator iter; //////////////////////////////// // 升序 nV2.clear(); nV2.push_back(11); nV2.push_back(14); nV2.push_back(15); nV2.push_back(15); nV2.push_back(16); // 升序 nV1.clear(); nV1.push_back(14); nV1.push_back(15); nV1.push_back(16); nV1.push_back(17); std::vector<int> nVResult(nV1.size() + nV2.size()); // 这里怎么计算结果的个数? // 此时nVResult: 0, 0, 0, 0, 0, 0, 0, 0, 0 // 并集 iter = std::set_union(nV1.begin(), nV1.end(), nV2.begin(), nV2.end(), nVResult.begin()); // 此时nVResult: 11, 14, 15, 15, 16, 17, 0(iter指向这里), 0, 0 // 结果是: 11, 14, 15, 15, 16, 17 // 交集 iter = std::set_intersection(nV1.begin(), nV1.end(), nV2.begin(), nV2.end(), nVResult.begin()); // 此时nVResult: 14, 15, 16, 15(iter指向这里), 16, 17, 0, 0, 0 // 结果是: 14, 15, 16 // [first1, last1) - ([first1, last1)交[first2, last2)) iter = std::set_difference(nV1.begin(), nV1.end(), nV2.begin(), nV2.end(), nVResult.begin()); // 此时nVResult: 17, 15(iter指向这里), 16, 15, 16, 17, 0, 0, 0 // 结果是: 17 // (并集-交集) iter = std::set_symmetric_difference(nV1.begin(), nV1.end(), nV2.begin(), nV2.end(), nVResult.begin()); // 此时nVResult: 11, 15, 17, 15(iter指向这里), 16, 17,0,0,0 // 结果是: 11, 15, 17 return 0; }
相关文章推荐
- STL_算法_05_集合算法
- STL 算法vector/set集合-交集,并集,差集,对称差
- STL 算法集合
- STL常用的拷贝替换算术集合算法
- STL算法集合 c++
- C++提高5 STL算法 :查找,统计,排序,拷贝,替换,算术,集合 |STL 案例:学校演讲比赛介绍
- STL算法之集合
- stl算法设计理念_二元谓词在set集合的应用
- STL 算法集合
- STL源码学习----集合相关算法
- 算法之路二:刘汝佳算法竞赛入门经典:STL集合 安迪的第一个字典 UVA10851
- STL常用算法之排序、集合
- 【转】STL算法-合并(集合)
- STL 算法集合
- STL 排序算法之全排列sort和next_permutation
- 面试:字符串集合 查找包含算法 的素数方案
- STL常用算法(转载)
- STL学习记录(十二):非修改类算法
- STL提供了很多高效的算法
- STL_set_集合