C++STL_set中函数_集合运算
2014-05-10 09:56
417 查看
c++第四次作业是STL应用。
就B/C两道集合运算题,百度查到相关知识——六个归并排序算法:[1]
分别为:merge(),
// 归并两个序列,元素总个数不变,只是将两上子有序序列归并为一个有序序列。
set_union(), // 实现求集合A,B的并。
set_difference(), //
实现求集合A,B的差(即A—B)。
set_intersection(),
// 实现求集合A,B交集。
set_symmetric_difference() ;// 实现求集合A,B的对称差(即 (A-B)并(B-A) ) 。
详细功能见代码:
参考资料:
[1]http://wenku.baidu.com/link?url=EnAQLy0TxccJAcNF8a58ghmaXBdR1b2vWea6xpZtD6E8GdYfEaZAc5zEp-2ksf4jGbwe9XJT5O6GRav4-dgbKJ_ep5i38wyrsOI1ltB-Ou3
附上B、C题目:
A∪B={x|x∈A∨x∈B}
A∩B={x|x∈A∧x∈B}
A-B={x|x∈A∧x不属于 B}
SA ={x|x∈(A∪B)∧x 不属于A}
SB ={x|x∈(A∪B)∧x 不属于B}
然后下面有2T行,每一行都有n+1个数字,其中第一个数字是n(0<=n<=100),表示该行后面还有n个数字输入。
接下来输出共7行,每行都是一个集合,
前2行分别输出集合A、B,接下5行来分别输出集合A、B的并(A u B)、交(A n B)、差(A – B)、补。
集合中的元素用“{}”扩起来,且元素之间用“, ”隔开。
4 1 2 3 1
0
A = {1, 2, 3}
B = {}
A u B = {1, 2, 3}
A n B = {}
A - B = {1, 2, 3}
SA = {}
SB = {1, 2, 3}
1 2 3 4 0
1 2 2 2 2 2 0
1 2 0
1 2 3 4 0
1 3 3 4 0
YES
NO
就B/C两道集合运算题,百度查到相关知识——六个归并排序算法:[1]
分别为:merge(),
// 归并两个序列,元素总个数不变,只是将两上子有序序列归并为一个有序序列。
set_union(), // 实现求集合A,B的并。
set_difference(), //
实现求集合A,B的差(即A—B)。
set_intersection(),
// 实现求集合A,B交集。
set_symmetric_difference() ;// 实现求集合A,B的对称差(即 (A-B)并(B-A) ) 。
详细功能见代码:
#include<iostream> #include<algorithm> using namespace std; #include<list> #include<set> template<class T> void INSERT_ELEMENT(T &coll,int begin,int end) { for(int i=begin;i<=end;i++) coll.insert(coll.end(),i); }
template<class S> void PRINT(S &coll) { S::iterator iter; for(iter=coll.begin();iter!=coll.end();iter++) cout<<*iter<<" "; }
int main() { list<int> coll1; set<int> coll2; INSERT_ELEMENT(coll1,1,6); INSERT_ELEMENT(coll2,3,8); cout<<"coll1:"; PRINT(coll1); //copy(coll1.begin (),coll1.end (),ostream_iterator<int>(cout," ")); cout<<endl<<"coll2:"; PRINT(coll2); //copy(coll2.begin (),coll2.end (),ostream_iterator<int>(cout," ")); cout<<endl; cout<<endl<<"after using merge() function:"; //函数1:merge() merge(coll1.begin (),coll1.end(),coll2.begin (),coll2.end (),ostream_iterator<int>(cout," ")); cout<<endl<<"after using set_unoin() function:";//函数2:set_union() set_union(coll1.begin (),coll1.end (),coll2.begin (),coll2.end (),ostream_iterator<int>(cout," ")); //set_union(),实现将前一个区间中元素与后一个区间的元素归并,但对于多于一个的相同元素,在合并的区间中的保存前两个区间中元素个数最大值。 //比如前一个区间中有两个2,后一个区间有三个2,故归并后区间中有三个2.故些算法归并后总元素个数会减少。 //就根据英文单词union意思为:并集,来理解。 cout<<endl<<"after using set_intersection() function:";//函数3:set_intersection() set_intersection(coll1.begin (),coll1.end (),coll2.begin (),coll2.end (),ostream_iterator<int>(cout," ")); cout<<endl<<"after using set_difference() function:";//函数4:set_difference() set_difference(coll1.begin (),coll1.end (),coll2.begin (),coll2.end (),ostream_iterator<int>(cout," ")); /*set_difference函数用于实现求集合A—B(即两个集合的差集,当把一个区间看成一个集合时),其中A,B分别对应第一个区间(即[coll1.begin(),coll1.end()),第二个区间(即[coll2.begin(),coll2.end()))。*/ cout<<endl<<"after using set_symmetric_difference() function:";//函数5:set_symmetric_difference(). set_symmetric_difference(coll1.begin (),coll1.end (),coll2.begin (),coll2.end () ,ostream_iterator<int> (cout," ")); //英文单词symmetric:对称,英文单词:difference:差。 //函数set_symmetric_difference求两个集合A,B的对称差(即(A—B)并(B—A))。 return 0; }
参考资料:
[1]http://wenku.baidu.com/link?url=EnAQLy0TxccJAcNF8a58ghmaXBdR1b2vWea6xpZtD6E8GdYfEaZAc5zEp-2ksf4jGbwe9XJT5O6GRav4-dgbKJ_ep5i38wyrsOI1ltB-Ou3
附上B、C题目:
B-Description
集合的运算就是用给定的集合去指定新的集合。设A和B是集合,则它们的并差交补集分别定义如下:A∪B={x|x∈A∨x∈B}
A∩B={x|x∈A∧x∈B}
A-B={x|x∈A∧x不属于 B}
SA ={x|x∈(A∪B)∧x 不属于A}
SB ={x|x∈(A∪B)∧x 不属于B}
Input
第一行输入一个正整数T,表示总共有T组测试数据。(T<=200)然后下面有2T行,每一行都有n+1个数字,其中第一个数字是n(0<=n<=100),表示该行后面还有n个数字输入。
Output
对于每组测试数据,首先输出测试数据序号,”Case #.NO”,接下来输出共7行,每行都是一个集合,
前2行分别输出集合A、B,接下5行来分别输出集合A、B的并(A u B)、交(A n B)、差(A – B)、补。
集合中的元素用“{}”扩起来,且元素之间用“, ”隔开。
Sample Input
14 1 2 3 1
0
Sample Output
Case# 1:A = {1, 2, 3}
B = {}
A u B = {1, 2, 3}
A n B = {}
A - B = {1, 2, 3}
SA = {}
SB = {1, 2, 3}
HINT
STL setC-Description
最近Jerry正在刻苦的学习STL中的set的功能函数,他发现set可以用现有的函数实现并、交、差、对称差等功能,但是他没有找到怎么来比较两个集合是否相等的功能函数,所以他想自己用其他的功能函数来实现能判断两个集合是否相等的功能函数。聪明的Jerry不一会就想到了解决办法,现在他想拿这道题来考考你,看你有没有他聪明。Input
输入有多组,每组数据有两行,每一行都代表一个集合,每一行有若干个正整数(0<d<=2147483647),并且每行的最后一个数字都是0,代表该行数据的结束,且末尾的0不计入集合中。最后以EOF结束输入。Output
对于每组数据输出都要输入一个结果,如果两个集合相等便输出“YES”,否则输出“NO”,每个结果占一行Sample Input
1 2 3 4 01 2 3 4 0
1 2 2 2 2 2 0
1 2 0
1 2 3 4 0
1 3 3 4 0
Sample Output
YESYES
NO
相关文章推荐
- 修改adb devices的设备ID/设备号
- 数据库架构的一些问题
- 以旧换新,iPhone5s免费拿
- const char* 转QString错误
- hadoop作业调优参数整理及原理
- U3D实现与iOS交互
- form的text设置默认值
- IEEE论文格式检查
- ACE框架的三大部分
- ACE网络框架学习体会
- Google搜索技巧与黑客入侵
- Java笔试题解析(一)
- 导购网站:差异化决定生死
- 线性光耦 和 非线性光耦
- C#刨根究底:《你必须知道的.NET》读书笔记系列
- OpenCV 简介
- C++_log4CXX的安装_Linux
- C#设计模式之职责链
- 数据库问题请大神解决
- CentOS添加Root权限(超级用户)用户方法|su,sudo命令详解