set简介:
set是STL中一种标准关联容器,它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference) 并(set_union),对称差(set_symmetric_difference) 等一些集合上的操作,如果需要集合中的元素允许重复那么可以使用multiset元素。set常用函数
(1)三种形成集合的方法:
#include<iostream>
#include<set>
using namespace std;
void print(multiset<int>& s){
multiset<int>::iterator it=s.begin();
while(it!=s.end()){cout<<*it<<" ";it++;}
cout<<endl;
}
int main(){
int a[]={5,3,9,3,7,2,9,3};
multiset<int>s1;
//通过构造函数insert()添加集合。
for(int i=0;i<sizeof(a)/sizeof(int);i++)s1.insert(a[i]);
print(s1);
//通过复制构造函数set(const set& x)创建集合
multiset<int>s2(s1);print(s2);
//通过构造函数set(conset value_type*first,const value_type* last)创建集合
multiset<int>s3(a,a+sizeof(a)/sizeof(int));print(s3);
}
输出展示:
(2)set常用的函数:
(话不多说直接上代码)
#include<iostream>
#include<set>
using namespace std;
void print(set<int>&s){
set<int>::iterator it=s.begin();
while(it!=s.end()){cout<<*it<<" ";it++;}
cout<<endl;
}
int main(){
int a[]={3,2,9,4,5};
set<int>s(a,a+sizeof(a)/sizeof(int));
//反向遍历
set<int>::reverse_iterator it=s.rbegin();
while(it!=s.rend()){cout<<*it<<" ";it++;}cout<<endl;
//判断集合是否为空
if(s.empty())puts("集合为空");else puts("集合不为空");
//计算集合的大小
cout<<s.size()<<endl;
//一个集合中x值出现的次数
cout<<s.count(2)<<endl;
//元素检索
set<int>::iterator te=s.find(5);
if(te==s.end())puts("没找到");
else puts("找到了");
set<int>::iterator iii=s.lower_bound(3);
cout<<*iii<<endl;
set<int>::iterator ttt=s.upper_bound(2);
cout<<*ttt<<endl;
//删除元素
set<int>::iterator itt=s.find(2);
s.erase(itt); print(s);//删除迭代指针itt处的元素
s.erase(5);print(s);//删除元素值等于key的元素.
}
(3)equal_range,pair,count,size用法举例:
#include<iostream>
#include<set>
using namespace std;
int main(){
int a[]={5,3,9,3,7,2,9,3};
set<int>myset(a,a+sizeof(a)/sizeof(int));
multiset<int>mymultiset(a,a+sizeof(a)/sizeof(int));
pair<set<int>::iterator,set<int>::iterator>s1;
pair<multiset<int>::iterator,multiset<int>::iterator>s2;
s1=myset.equal_range(3);
s2=mymultiset.equal_range(3);
int ncount=myset.count(3);
int nMulticount=mymultiset.count(3);
set<int>::iterator te;
cout<<"set(搜索值等于3的元素):"<<endl;
for(te=s1.first;te!=s1.second;te++)cout<<*te<<" ";cout<<endl;
cout<<"个数是:"<<ncount<<endl;
cout<<"总个数是:"<<myset.size()<<endl;
multiset<int>::iterator it;
cout<<"multiset(搜索值等于3的元素):"<<endl;
for(it=s2.first;it!=s2.second;it++)cout<<*it<<" ";cout<<endl;
cout<<"个数是:"<<nMulticount<<endl;
cout<<"总个数是:"<<mymultiset.size()<<endl;
}
结果展示:
未完待续……..