一个集合(set)是一个容器,其中所包含的元素的值是唯一的。集合中的元素按一定的顺序排列,并被作为集合中的实例。set中不会包含重复的元素。
为了实现集合的快速运算,set内部数据的组织是一棵红黑树(一种非严格意义上的平衡树),这棵树具有对数据自动排序的功能,所以在set内部所有的数据都是有序的,即要求set中的元素必须是可排序的。如果是自定义的类型,那在定义类型的同时必须给出运算符"<"的定义。
定义一个元素为整数的集合,可以用:
set<int> intSet;
对集合数据添加查找与删除举个例子:
// STL 集合(set) #include <iostream> #include <set> using namespace std; int main() { set<int> intSet; //定义set对象 set<int>::iterator iter; //迭代器 for (int i =0; i < 10; ++i) intSet.insert(i); //集合A中是0~9 if (intSet.find(1) == intSet.end()) // 查找1 cout<<"Not Find "<<1<<endl; else cout<<"Find Value "<<1<<endl; intSet.erase(1); //删除1 if (intSet.find(1) == intSet.end()) cout<<"Not Find "<<1<<endl; else cout<<"Find Value "<<1<<endl; return 0; }输出结果:
Find Value 1
Not Find 1
STL中的算法包含在<algorithm>头文件中,集合的算法也包含在该头文件中。
下面通过一个C++的例子说明集合的各种操作:
// STL 集合算法(set) #include <iostream> #include <algorithm> #include <set> using namespace std; int main() { set<int> A,B,C; //定义set对象 set<int>::iterator iter; //迭代器 for (int i = 0; i < 10; ++i) { A.insert(i); //集合A中是0~9 B.insert(2*i+1); //集合B中都是奇数1~19 } //集合A for (iter = A.begin(); iter != A.end(); ++iter) cout<<*iter<<" "; cout<<endl; //集合B for (iter = B.begin(); iter != B.end(); ++iter) cout<<*iter<<" "; cout<<endl; //集合的并 set_union(A.begin(), A.end(),B.begin(),B.end(), insert_iterator<set<int> >(C,C.begin())); for (iter = C.begin(); iter != C.end(); ++iter) cout<<*iter<<" "; cout<<endl; //集合的交 C.clear(); //清空集合 set_intersection(A.begin(), A.end(), B.begin(), B.end(), insert_iterator<set<int> >(C,C.begin())); for (iter = C.begin(); iter != C.end(); ++iter) cout<<*iter<<" "; cout<<endl; //集合的差 C.clear(); //清空集合 set_difference(A.begin(), A.end(), B.begin(), B.end(), insert_iterator<set<int> >(C,C.begin())); for (iter = C.begin(); iter != C.end(); ++iter) cout<<*iter<<" "; cout<<endl; return 0; }输出结果:
0 1 2 3 4 5 6 7 8 9
1 3 5 7 9 11 13 15 17 19
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
1 3 5 7 9
0 2 4 6 8
ps:
insert_iterator::insert_iterator //普通插入器 (复制粘贴自MSDN)
explicit insert_iterator(Cont& x, Cont::iterator it);
The constructor initializes container with x, and iter with it.
STL 向量(vertor)详解:http://blog.csdn.net/qingdujun/article/details/17468181
STL 列表(list)详解:http://blog.csdn.net/qingdujun/article/details/17483185
STL 栈适配器(stack)详解:http://blog.csdn.net/qingdujun/article/details/17483407
STL 队列适配器(queue)详解:http://blog.csdn.net/qingdujun/article/details/17498707
STL 串类型(string)详解:http://blog.csdn.net/qingdujun/article/details/17498795
STL 多维数组(vector<vector<> >)详解:http://blog.csdn.net/qingdujun/article/details/17499871
转载请保留原文地址:http://blog.csdn.net/qingdujun/article/details/17501875