初识set,map

已知快速查找:

1.暴力查找

2.排序+二分查找(插入删除麻烦)

3.搜索树->二叉搜索树(极端情况n)->平衡树(AVL树,红黑树)(logn高度太高,搜索次数多)->多叉平衡搜索树(B树系列)

4.哈希系列

序列式容器和关联式容器

set->底层红黑树

一.仿函数

二.set

模板参数:

传一个参数类型就行,默认比较器是小于,左小右大,内存池不用管

迭代器遍历:

默认走中序,从最小的开始遍历,即  .begin()位置

删某个位置/某个值/某个位置区间

对于删某个位置:用find删要检查是否找到了,返回end删会报错

判断是否删除成功:用删某个值,接收删除成功的个数

对于某个区间:C++从来是左闭右开,右为要删除的下一个位置

交换两个根节点的指针

与算法的find

尽量用set的find,算法的find是通过遍历迭代器区间,暴力查找,set的能logn,走高度层。

用于判断某个数在不在,效率logn,返回这个数在的次数,由于set不重复键,只有0,1

返回传入值为下限,大于等于它的迭代器位置

返回值为上限,返回大于它的迭代器位置

形成一个上下限之间的位置区间,传30,传60,返回【30,60)删除传他们可以删除30到60的区间(包含)

找到和这个值相等的一段区间,放到pair里。

三.multiset

允许键冗余

-->相同的值可能放到左边或右边,会旋转。

multiset查找返回中序第一个:
有一些好处:找到第一个迭代器++就能找到下一个(迭代器遍历是中序,相等的值一定连续)---相等的值是连续的

删除删一个值,删的是所有相同的值

注意位置删除不会返回迭代器,会有迭代器失效问题

返回一个左闭右开的区间

四.pair

first,second成员,

重载了比较大小>,<,比键

五.map

map存的是pair键值对,value_type是pair,存储单元就是pair,

构造pair:

1.用make_pair自己推导

2.花括号自己隐式类型转换

3.自己写pair<T,P> ...

构造map

={{ },{ },{ }};用它的initializer_list

迭代器->返回成员结构部分,it->指向成员的成员部分

it.operator->()->。。。省略为it->。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值