您的位置:首页 > Web前端

STL 之includes,set_intersection,set_union,set_difference,set_symmetric_difference

2015-05-28 16:20 369 查看
includes,set_intersection,set_union,set_difference,set_symmetric_difference都是集合论中的操作。这些算法都假定指定区间类的元素已经有序。

includes:A∈B

set_intersection:A∩B

set_union:A∪B

set_difference:A-B

set_symmetric_difference:(A-B)∪(B-A)


1,includes

声明:

#include <algorithm>

template <class inputItr1, class inputItr2>

bool includes(inputItr1 first1, inputItr1 last1, inputItr2 first2, inputItr2 last2);

template <class inputItr1, class inputItr2, class binaryPredicate>

bool includes(inputItr1 first1, inputItr1 last1, inputItr2,binaryPredicate op);

示例代码:

#include <iostream>

#include <list>



#include <string>

#include <numeric>

#include <iterator>

#include <vector>

#include <functional>



#include <algorithm>



using namespace std;



int main() {

char setA[5] = {'A','B','C','D','E'};

char setB[10] = {'A','B','C','D','E','F','I','J','K','L'};

char setC[5] = {'A','E','I','O','U'};



ostream_iterator<char> screen(cout, " ");

cout << "setA:" << endl;

copy(setA,setA+5,screen);

cout << endl;

cout << "setB:" << endl;

copy(setB,setB+10,screen);

cout << endl;

cout << "setC:" << endl;

copy(setC,setC+5,screen);

cout << endl;



if (includes(setB,setB+10,setA,setA+5))

{

cout << "setA is a subset of setB" << endl;

} else {

cout << "setA is not a subset of setB" << endl;

}



if (includes(setB,setB+10,setC,setC+5))

{

cout << "setC is a subset of setB" << endl;

} else {

cout << "setC is not a subset of setB" << endl;

}



return 0;

}

运行结果:

charList:

a b c d e

charList:

A B C D E

list

2 8 5 1 7 11 3

4 16 10 2 14 22 6

list

4 16 10 2 14 22 6


2,set_intersection,set_union

声明:

#include <algorithm>

template <class inputItr1, class inputItr2,class outputItr>

outputItr set_intersection(inputItr1 first1, inputItr1 last1, inputItr2 first2,inputItr2 last2,outputItr destFirst);

template <class inputItr1, class inputItr2,class outputItr,class binaryPredicate>

outputItr set_intersection(inputItr1 first1, inputItr1 last1, inputItr2 first2,inputItr2 last2,outputItr destFirst,binaryPredicate op);



template <class inputItr1, class inputItr2,class outputItr>

outputItr set_union(inputItr1 first1, inputItr1 last1, inputItr2 first2,inputItr2 last2,outputItr destFirst);

template <class inputItr1, class inputItr2,class outputItr,class binaryPredicate>

outputItr set_union(inputItr1 first1, inputItr1 last1, inputItr2 first2,inputItr2 last2,outputItr destFirst,binaryPredicate op);

示例代码:

#include <iostream>

#include <list>



#include <string>

#include <numeric>

#include <iterator>

#include <vector>

#include <functional>



#include <algorithm>



using namespace std;



int main() {

int setA[5] = {2,4,5,7,8};

int setB[7] = {1,2,3,4,5,6,7};

int setC[5] = {2,5,8,8,15};

int setD[6] = {1,4,4,6,7,12};

int AunionB[10];

int AunionC[10];

int BunionD[15];

int AintersectB[10];

int AintersectC[10];



int * lastElement;

ostream_iterator<int> screen(cout," ");

cout << "setA:" << endl;

copy(setA,setA+5,screen);

cout << endl;

cout << "setB:" << endl;

copy(setB,setB+7,screen);

cout << endl;

cout << "setC:" << endl;

copy(setC,setC+5,screen);

cout << endl;

cout << "setD:" << endl;

copy(setD,setD+6,screen);

cout << endl;



// set_union

lastElement = set_union(setA,setA+5,setB,setB+7,AunionB);

cout << "AunionB:" << endl;

copy(AunionB,lastElement,screen);

cout << endl;



lastElement = set_union(setA,setA+5,setC,setC+5,AunionC);

cout << "AunionC:" << endl;

copy(AunionC,lastElement,screen);

cout << endl;



lastElement = set_union(setB,setB+7,setD,setD+6,BunionD);

cout << "BunionD:" << endl;

copy(BunionD,lastElement,screen);

cout << endl;



// set_intersection

lastElement = set_intersection(setA, setA+5,setB,setB+7,AintersectB);

cout << "AintersectB:" << endl;

copy(AintersectB,lastElement,screen);

cout << endl;



lastElement = set_intersection(setA, setA+5,setC,setC+5,AintersectC);

cout << "AintersectC:" << endl;

copy(AintersectC,lastElement,screen);

cout << endl;

return 0;

}

运行结果:

charList:

a b c d e

charList:

A B C D E

list

2 8 5 1 7 11 3

4 16 10 2 14 22 6

list

4 16 10 2 14 22 6


3 set_difference,set_symmetric_difference

声明:

#include <algorithm>

template <class inputItr1, class inputItr2,class outputItr>

outputItr set_difference(inputItr1 first1, inputItr1 last1, inputItr2 first2,inputItr2 last2,outputItr destFirst);

template <class inputItr1, class inputItr2,class outputItr,class binaryPredicate>

outputItr set_difference(inputItr1 first1, inputItr1 last1, inputItr2 first2,inputItr2 last2,outputItr destFirst,binaryPredicate op);



template <class inputItr1, class inputItr2,class outputItr>

outputItr set_symmetric_difference(inputItr1 first1, inputItr1 last1, inputItr2 first2,inputItr2 last2,outputItr destFirst);

template <class inputItr1, class inputItr2,class outputItr,class binaryPredicate>

outputItr set_symmetric_difference(inputItr1 first1, inputItr1 last1, inputItr2 first2,inputItr2 last2,outputItr destFirst,binaryPredicate op);

示例代码:

#include <iostream>

#include <list>



#include <string>

#include <numeric>

#include <iterator>

#include <vector>

#include <functional>



#include <algorithm>



using namespace std;



int main() {

int setA[5] = {2,4,5,7,8};

int setB[7] = {3,4,5,6,7,8,10};

int setC[5] = {1,5,6,8,15};



int AdifferenceC[5];

int BsymDiffC[10];

int * lastElement;

ostream_iterator<int> screen(cout," ");

cout << "setA:" << endl;

copy(setA,setA+5,screen);

cout << endl;

cout << "setB:" << endl;

copy(setB,setB+7,screen);

cout << endl;

cout << "setC:" << endl;

copy(setC,setC+5,screen);

cout << endl;



// set_difference

lastElement = set_difference(setA,setA+5,setC,setC+5,AdifferenceC);

cout << "AdifferenceC:" << endl;

copy(AdifferenceC,lastElement,screen);

cout << endl;



// set_symmetric_differenc 对称差

lastElement = set_symmetric_difference(setB,setB+7,setC,setC+5,BsymDiffC);

cout << "BsymDiffC:" << endl;

copy(BsymDiffC,lastElement,screen);

cout << endl;



return 0;

}

运行结果:

setA:

2 4 5 7 8

setB:

3 4 5 6 7 8 10

setC:

1 5 6 8 15

AdifferenceC:

2 4 7

BsymDiffC:

1 3 4 7 10 15
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: