C++set和map

vector、listdeque、
forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面
存储的是元素本身。
关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的
键值对,在数据检索时比序列式容器效率更高

set是平衡搜索二叉树,左右两边较均衡。

set就是搜索二叉树的模板。

例子

’ 

 set是搜索二叉树,是中序有序的。

搜索二叉树没有重复值。

set本质是排序加去重。

用迭代器插入值的方法要慎用。

因为可能会造成插入的地方的值与该位置 不匹配。 

find函数返回迭代器。

 erase多次删除同一个值不报错。

erase会返回值

用算法中的find也可以,find是个模板。

 但它俩底层不一样,find是暴力查找。时间复杂度是O(N)

 s.find是二叉树式的查找,时间复杂度是O(logN)

std::count记录这个树中这个数出现的次数。

可以用它判断这个数在不在。

另一个容器是multiset,它允许一个树里有多个同样的数。multiset的操作和set一样,count在树中的作用就显现出来了。 

用multiset这样写就是排序了,而不是排序加去重。

 

 multiset中find找到的是中序的第一个

 lower_bound返回大于等于这个数的边界,upper_bound返回大于这个数的边界。

 erase利用迭代器是左闭右开的。

 

 


 

map是搜索二叉树的KV结构。通过key能找到对应的value

pair是一个KV键值对。

pair相当于把_key和_value变成一个值。 

 

 

 

 这样也行

 它是对双箭头的简化。第一个箭头获得结构的指针,第二个箭头获得结构的数据。

 这样也行。最好加上引用和const。

 

 统计数组中各个水果出现的次数。

 

 创建并计数那部分也可以这样写。下面学一下这种用法。

 方框的本质是这样的。V()是int的匿名对象,相当于0.

insert返回迭代器。insert要插入的pair如果不存在就会创建,如果存在则返回创建完的迭代器。

 

map的[]可以插入,修改,查找 

如果值不存在,会插入,值查找会查找。

 

 insert的返回值。

这里面最后一行是先插入后修改的,插入时第二个string插入的是缺省值。 

 默认值是空。

Key相同,即名字相同,再此插入相同的名字就会失败。

 multimap也能统计次数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南种北李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值