用map:
#include <iostream>
#include <map>
using namespace std;
int main()
{
int a[] = {1,2,3,4,5,6,7,8,9};
int b[] = {2,4,6,8,10};
int c[10];
map<int, int> m;
int len_a = sizeof(a)/sizeof(a[0]);
int len_b = sizeof(b)/sizeof(b[0]);
int i, count=0;
for(i=0; i<len_a; i++)
m[a[i]] = 1;
for(i=0; i<len_b; i++)
{
if(m.find(b[i])->second==1)
{
m[b[i]] = 2;
c[count++] = b[i];
}
}
for(i=0; i<count; i++)
cout<<c[i]<<" ";
cout<<endl;
return 0;
}
用bitset
#include <iostream>
#include <bitset>
#include <set>
#include<vector>
using namespace std;
//求集合a和集合b的交集
vector<int> GetIntersection(set<int>a,set<int>b)
{
bitset<2^32> bs(0);//创建一个位数组来存储a中存在的数
vector<int >c;//创建向量来存储交集中的元素
//把a中存在的数值作为c的下标,标记为存在
for(set<int>::iterator iter=a.begin ();iter!=a.end();iter++)
{
bs[*iter]=1;
}
//判断b中的元素是否a中存在,存在的话加入向量c中
for(iter=b.begin ();iter!=b.end();iter++)
{
if(bs[*iter]==1)
c.push_back(*iter);
}
return c;
}
void main()
{
//计算两个集合的交集
set<int> a;
set<int> b;
for(int i=0;i<10;i++)
{
a.insert(i);
b.insert(i*2);
}
vector<int >c=GetIntersection(a,b);
for(vector<int>::iterator iter=c.begin();iter!=c.end();iter++)
{
cout<<*iter;
}
system("pause");
}