stl set求交集 并集 差集

时间:2023-11-15 13:57:20

#include <iostream>
#include <set>

using namespace std;

typedef struct tagStudentInfo
{
  int nID;
  string strName;
  bool operator <(tagStudentInfo const& _A) const//升序排列

{
     if(nID<_A.nID)
     return true;
     if(nID == _A.nID)
     return strName.compare(_A.strName) < 0;
        return false;
    }
}sInfo,*PsInfo;

int main()
{
  set<sInfo>setS;
  sInfo stuInfo;

stuInfo.nID = 10;
  stuInfo.strName = "test1";
  setS.insert(stuInfo);
  
  stuInfo.nID = 20;
  stuInfo.strName = "test2";
  setS.insert(stuInfo);

set<sInfo>::iterator sIter;
  for(sIter=setS.begin(); sIter!=setS.end(); sIter++)
  {
    cout <<(*sIter).nID <<" "<< (*sIter).strName << endl;
  }

set<int>a;
  set<int>b;
  set<int>c;
  set<int>d;
  set<int>e;
   
  a.insert(1);
  a.insert(2);
  a.insert(3);
  a.insert(4);
  a.insert(5);

b.insert(3);
  b.insert(4);
  b.insert(5);
  
  set_union(a.begin(), a.end(), b.begin(), b.end(), inserter(c, c.begin()));
  set<int>::iterator s;
  for(s=c.begin(); s!=c.end(); s++)
  {
    cout <<(*s)<<",";
  }
  cout << endl;
  
  set_intersection(a.begin(), a.end(), b.begin(), b.end(), inserter(d, d.begin()));
  for(s=d.begin(); s!=d.end(); s++)
  {
    cout <<(*s) <<",";
  }
  cout << endl;
  
  set_difference(a.begin(), a.end(), b.begin(), b.end(), inserter(e, e.begin()));
  for(s=e.begin(); s!=e.end(); s++)
  {
    cout <<(*s)<<",";
  }
  cout <<endl;
  
  return 0;
}    

10 test1
20 test2
1,2,3,4,5,
3,4,5,
1,2,

转自http://blog.chinaunix.net/uid-9950859-id-99130.html