ID:7302模板库应用2-模板题3-题解
题目描述:
现在有10个集合(元素不可重),编号为0~9,现在有6种操作:
给一个集合x插入一个数y。
给一个集合x删除一个数y(如果没有就不删)。
给两个集合x,y,将集合x=x∪y(集合求并),并将y清空。
给两个集合x,y,将集合x=x∩y(集合求交),并将y清空。
给一个集合x和一个数y,询问集合x中是否出现了y。
给一个集合x,问集合x中有多少个数。
不保证所有数不相同。
思路: 直接用STL里的set集合去写
0.定义:有10个set,所以要定义10个
set s[10], c;//c之后要用
- 给一个集合x插入一个数y:直接添加
if (op == 1)
{
cin >> x >> y;
s[x].insert(y);
}
- 给一个集合x删除一个数y(如果没有就不删):先判断有没有(用了find()),再删除
if (op == 2)
{
cin >> x >> y;
if (s[x].find(y) != s[x].end())
{
s[x].erase(s[x].find(y));
}
}
- 给两个集合x,y,将集合x=x∪y(集合求并),并将y清空:用并集函数set_union()
if (op == 3)
{
cin >> x >> y;
c.clear();
set_union(s[x].begin(), s[x].end(), s[y].begin(), s[y].end(), inserter(c, c.begin()));//c在这里!
s[x] = c;
s[y].clear();
}
- 给两个集合x,y,将集合x=x∩y(集合求交),并将y清空:用交集函数set_intersection()
if (op == 4)
{
cin >> x >> y;
c.clear();
set_intersection(s[x].begin(), s[x].end(), s[y].begin(), s[y].end(), inserter(c, c.begin()));
s[x] = c;
s[y].clear();
}
- 给一个集合x和一个数y,询问集合x中是否出现了y:用计数函数count()
if (op == 5)
{
cin >> x >> y;
if (s[x].count(y))
{
cout << "Yes" << endl;
}
else
{
cout << "No" << endl;
}
- 给一个集合x,问集合x中有多少个数:用大小size()
if (op == 6)
{
cin >> x;
cout << s[x].size() << endl;
}