[C/C++标准库]_[初级]_[集合操作]

来源:互联网 发布:心知天气 融资 编辑:程序博客网 时间:2024/05/22 04:25


set_difference

set_union

set_symmetric_difference


场景:

1.需要合并集合或过滤出不同集合里的元素便于操作.如一个集合里有索引值1,2.总集合里有1,2,3,4,5.需要找出3,4,5时,就需要set_symmetric_difference


#include <stdio.h>#include <string.h>#include <algorithm>#include <vector>#include <iostream>#include <string>using namespace std;//1.可重复值//2.集合对称差void ExampleSetSymmetricDifference(){vector<int> i1;vector<int> i2;//    int i1[] = {1,2,5,7};//int i2[] = {0,1,2,3};//int i2[] = {0,1,2,3,4,5,6,7};std::vector<int>::iterator it;i1.push_back(1);i1.push_back(2);i1.push_back(5);i1.push_back(8);i2.push_back(0);i2.push_back(1);i2.push_back(2);i2.push_back(3);i2.push_back(4);i2.push_back(5);i2.push_back(6);i2.push_back(6);i2.push_back(7);    sort(i1.begin(),i1.end());sort(i2.begin(),i2.end());vector<int> res(i2.size()+i1.size());//对称差it = set_symmetric_difference(i1.begin(),i1.end(),i2.begin(),i2.end(),res.begin());res.resize(it-res.begin());size_t size = res.size();printf("size %d\n",size);for (it=res.begin(); it!=res.end(); ++it){std::cout << ' ' << *it;    }    std::cout << std::endl;}//1.可重复值//2.集合差集void ExampleSetDifference(){  int first[] = {5,10,15,15,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 (second,second+5);   // 10 20 30 40 50  //frist相对second的不同值  it=std::set_difference (first, first+5, second, second+5, v.begin());                                               //  5 15 25  0  0  0  0  0  0  0  v.resize(it-v.begin());                      //  5 15 25  std::cout << "The difference has " << (v.size()) << " elements:\n";  for (it=v.begin(); it!=v.end(); ++it)  {     std::cout << ' ' << *it;  }  std::cout << std::endl;}//1.可重复值//1.集合并集,共有的只出现一次void ExampleSetUnion(){  int first[] = {5,10,15,15,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 (second,second+5);   // 10 20 30 40 50  it=std::set_union (first, first+5, second, second+5, v.begin());  v.resize(it-v.begin());  std::cout << "The union has " << (v.size()) << " elements:\n";  for (it=v.begin(); it!=v.end(); ++it)  {  std::cout << ' ' << *it;  }  std::cout << std::endl;}int main(int argc, char *argv[]){std::cout << "SetDifference" << endl;ExampleSetDifference();std::cout << "SetSymmetricDifference" << endl;ExampleSetSymmetricDifference();std::cout << "SetUnion" << endl;ExampleSetUnion();return 0;}

输出:

SetDifferenceThe difference has 4 elements: 5 15 15 25SetSymmetricDifferencesize 7 0 3 4 6 6 7 8SetUnionThe union has 9 elements: 5 10 15 15 20 25 30 40 50[Finished in 0.3s]



0 0
原创粉丝点击