欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++STL之set容器

程序员文章站 2022-07-10 17:50:39
set是STL中一种标准关联容器(vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。set,顾名 ......

set是STL中一种标准关联容器(vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行序排列,支持集合的交(set_intersection) (set_difference) (set_union) 对称差(set_symmetric_difference) 等一些集合上的操作,如果需要集合中的元素允许重复那么可以使用multiset

#include<set>
#include<iterator>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
set<int>v1;

//insert插入
v1.insert(1);
v1.insert(4);
v1.insert(5);
v1.insert(1);                              //元素1因为已经存在所以set中不会再次插入1
v1.insert(3);
v1.insert(2);

//遍历set,可以发现元素是有序的
set<int>::iterator it;
for(it=v1.begin();it!=v1.end();it++)       //集合v1{1 2 3 4 5}
  cout<<*it<<" ";
cout<<endl;

//使用size()函数可以获得当前元素个数 5
cout<<v1.size()<<endl;

if(v1.find(200)==v1.end())                 //find()函数可以查找元素是否存在
   cout<<"200 isn't in the set v1"<<endl;  //find会挨个查找set,
                                           //当到达set.end()时,就是一个也没找到,返回end()

set<int>v2;

for(int i=3;i<=10;i++)                     //集合v2{3 4 5 6 7 8 9 10}
v2.insert(i);
for(it=v2.begin();it!=v2.end();it++)
   cout<<*it<<" ";
cout<<endl;

set<int>v3;

//获得两个set的并
//v1并v2 -> 集合v3 {1 2 3 4 5 6 7 8 9 10} set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),inserter(v3,v3.begin())); v3.clear(); //注意进行集合操作之前接收结果的set要调用clear()函数清空 //获得两个set的交
//v1交v2 -> 集合v3 {3 4 5} set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),inserter(v3,v3.begin())); v3.clear();
//获得两个set的差,也就是上集合-下集合,下集合多出来的不管
//v1差v2 -> 集合v3{1 2} set_difference(v1.begin(),v1.end(),v2.begin(),v2.end(),inserter(v3,v3.begin())); v3.clear();
//获得两个set的对称差,也就是假设两个集合分别为A和B那么对称差为AUB-A∩B
//v1对称差v2 -> 集合v3{1 2 6 7 8 9 10} set_symmetric_difference(v1.begin(),v1.end(),v2.begin(),v2.end(),inserter(v3,v3.begin())); return 0; }

 

set类型水题练手:http://www.cnblogs.com/kannyi/p/8519651.html