Two sets of integers A and B, Find its intersection(use map vector c++标准容器)
Solving problems using C++
/*
File name:求交集.cpp
Author:杨柳
Date:2017/5/4
IDE:DEV-c++
*/
#include <iostream>
#include<stdlib.h>
#include <map>
#include<vector>
using namespace std;
//求集合a和集合b的交集
vector<int> section(vector<int>a,vector<int>b) //返回向量交集
{
vector<int >c;//创建向量来存储交集中的元素
map<int,int> m;
//把a中存在的数值使用map标记为统一关键字
vector<int>::iterator it; //使用迭代器访问元素
for( it=a.begin ();it!=a.end();it++)
{
m[*it]=1;
}
//判断b中的元素是否a中存在,存在的话加入向量c中
for(it=b.begin ();it!=b.end();it++)
{
if(m[*it]==1)
c.push_back(*it);
}
return c;
}
int main()
{
//计算两个集合的交集
vector<int> a;
vector<int> b;
int a1[100];
int a2[100];
for(int i=0;i<20;i++)
{
a1[i]=rand()%20;
a2[i]=rand()%20;
}
cout<<"集合a1:"<<endl;
for(int i=0;i<20;i++)
{
cout<<a1[i]<<",";
}
cout<<endl<<"集合a2"<<endl;
for(int i=0;i<20;i++)
{
cout<<a2[i]<<",";
}
cout<<endl;
for(int i=0;i<20;i++)
{
a.push_back(a1[i]);
b.push_back(a2[i]);
}
vector<int >c=section(a,b);
cout<<endl<<"its intersection:"<<endl;
for(vector<int>::iterator it=c.begin();it!=c.end();it++)
{
cout<<*it<<",";
}
return 0;
}
//方法二
/*
#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];
}
}
cout<<"its intersection:"<<endl;
for(i=0; i<count; i++)
cout<<c[i]<<",";
return 0;
}
*/