外贸soho建网站,贵阳免费做网站,wordpress json数据库,网页游戏开服表是什么set也是STL中比较常见的容器。set集合容器实现了红黑树的平衡二叉检索树的数据结构#xff0c;它会自动调整二叉树的排列#xff0c;把元素放到适当的位置。set容器所包含的元素的值是唯一的#xff0c;集合中的元素按一定的顺序排列。
我们构造set集合的目的是为了快速的检…set也是STL中比较常见的容器。set集合容器实现了红黑树的平衡二叉检索树的数据结构它会自动调整二叉树的排列把元素放到适当的位置。set容器所包含的元素的值是唯一的集合中的元素按一定的顺序排列。
我们构造set集合的目的是为了快速的检索不可直接去修改键值。
set的一些常见操作
begin() 返回指向第一个元素的迭代器 clear() 清除所有元素 count() 返回某个值元素的个数 empty() 如果集合为空返回true(真 end() 返回指向最后一个元素之后的迭代器不是最后一个元素 erase() 删除集合中的元素 find() 返回一个指向被查找到元素的迭代器 insert() 在集合中插入元素 max_size() 返回集合能容纳的元素的最大限值 size() 集合中元素的数目 swap() 交换两个集合变量
其实set的大部分操作是与vector类似的不过set不支持随机访问必须要使用迭代器去访问。由于set放入一个元素就会调整这个元素的位置把它放到合适的位置所以set中只有一个insert插入操作。
对于集合来说我们一般有并集、交集、差集、补集这几种操作所以在set的操作中我们也有类似的集合操作它们都在#includealgorithm的头文件下 [html] view plain copy std::set_intersection() :这个函数是求两个集合的交集。 std::set_union() :求两个集合的并集 std::set_difference差集 std::set_symmetric_difference得到的结果是 第一个迭代器相对于第二个的差集 并上第二个相对于第一个的差集 学校OJ上有一个题可以来进行这几个操作下面是学校OJ的题 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组测试数据。T200 然后下面有2T行每一行都有n1个数字其中第一个数字是n(0n100)表示该行后面还有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 10Sample 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}我的代码如下 [cpp] view plain copy #includeiostream #includeset #includealgorithm #includevector using namespace std; void print(setint a) { if(a.begin() a.end()) cout } endl; for(setint::iterator it a.begin();it!a.end();it) { if(ita.end()) { it--; cout *it }\n; } else { it--; cout *it , ; } } } int main() { int T, cou 0; setint a, b, c; cin T; while(T--) { cou; a.clear(), b.clear(), c.clear(); int n; cin n; for(int i0;in;i) { int x; cin x; a.insert(x); } cin n; for(int i0;in;i) { int x; cin x; b.insert(x); } cout Case# cou : endl; cout A {; print(a); cout B {; print(b); set_union(a.begin(),a.end(),b.begin(),b.end(),inserter(c,c.begin())); cout A u B {; print(c); c.clear(); set_intersection(a.begin(),a.end(),b.begin(),b.end(),inserter(c,c.begin())); cout A n B {; print(c); c.clear(); set_difference(a.begin(),a.end(),b.begin(),b.end(),inserter(c,c.begin())); cout A - B {; print(c); c.clear(); set_difference(b.begin(),b.end(),a.begin(),a.end(),inserter(c,c.begin())); cout SA {; print(c); c.clear(); set_difference(a.begin(),a.end(),b.begin(),b.end(),inserter(c,c.begin())); cout SB {; print(c); } return 0; } inserter是一个迭代器适配器中的插入迭代器。
原理其内部调用insert() 功能在容器的指定位置插入元素 限制只有提供了inset()成员函数的容器中inserter才能派上用场. 所有STL容器都提供了inset()函数. 适用所有STL容器