set/multiset容器

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;

}

}

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值