set:所有元素都会在插入时自动被排序
本质:set/multiset属于关联式容器,底层结构是用二叉树实现
set和multiset区别:set不允许容器中有重复的元素,multiset允许容器中有重复的元素
构造:
默认构造,拷贝构造
赋值,等号操作符s3=s2
插入数据只有insert
set<int>s1;
s1.insert(10);
for(set<int>::iterator it=s.begin();it!=s.end();it++)cout<<*it
所有元素插入会排序,且重复值会回归为一个值,不会出现重复值
set大小和交换
size();
empty();
swap(st);
set插入和删除
set容器进行插入数据和删除数据
insert(elem);
clear()
erase(pos)删除所指的元素,返回下一个元素
s1.erase(s1.begin());
会删除排序后的,而不是插入的顺序
erase(beg,end);
erase(elem);删除容器中值为elem
set查找和统计
find(key),存在返回迭代器,不存在,返回set.end()
set<int>::iterator pos=s1.find(30)
if(pos!=s1.end)找到
count(key),返回key的个数
int num=s1.count(30);对于set要么0要么1
set和multiset区别
set不可以插入重复数据
set插入数据的同时会返回插入结果,表示插入是否成功
multiset不会检测数据,因此可以插入重复数据
pair<set<int>::iterator,bool>ret=s.insert(10); 对组数据
if( ret.second)是1,则插入成功,0则失败
与set的insert的返回值类型定义有关
pair对组创建
成对出现的数据,利用对组可以返回两个数据
两种创建方式
默认构造
pair<string,int>p("tom",20);
cout<<p.first<<p.second<<endl;
makepair
pair<string,int>p2=make_pair("jerry",30);
set容器排序
set容器默认排序规则从小到大,掌握如何改变排序规则
利用仿函数可以改变排序规则
class compar
{
public:
bool operator()(int v1,int v2)
{
return v1>v2降序排序
}
}
set<int,compar>s1;
s1.insert(10);
对于自定义数据类型person
class compareperson
{
bool operator()(const person& p1,const person& p2)
{
return p1.age>p2.age;
}
}