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也能统计次数。