c++各种容器特点

下面内容出自:https://www.bilibili.com/video/BV1Xa4y1n7Rs?from=search&seid=12323657797647836565

基于balance search tree (BST)的容器探索:

set:每一个value都不是重复的  这个特性经常会被用到

.insert()  :往容器中加入元素,相当于vector的.pushback()

 

 不管插入多少个相同的数字,实际上只会存储一个。

 时间复杂度为上面这个,这是因为当添加的时候会事先进行搜索,这个搜索的时间复杂度为Olog(n),

find: .find(value)    用来查找容器中是否有某一个值  时间复杂度照样是0log(n)

 加上上面这一段进行提示搜索的情况,同样适用于其他容器。

erase: .erase(iterator)

在删除之前应该进行这个数字的检查,不然会出现未知的错误,应该添上下面的语句:

 时间复杂度同样是olog(n) 因为当删除迭代器对应的数时,看上去是olog(1),实际上在删除之后整个balance tree 会重新进行调整,这个时间复杂度是olog(n)

set的member function 也能返回key值的iterator ,使用方法为:

.lower_bound  和 . upper.bound

关于set的内容就到这了!!!

map / multimap   map中key  is  unique  

这个容器是含有两个参数的模版类:每一个都是以pair键值对的形式存在的

pair<key_type, data_type>

例如:

pair<int,string>

pair<int,int>

使用方式:

 

 find使用方式和上面的set容器使用方式一样,就是返回指针的时候需要使用箭头访问成员变量。时间复杂度 0log(n)

erase的使用和上面也是一样的  时间复杂度也是olog(n)

lower_bound  和 upper_bound  也和上面是一样的    

[  ] :方括号使用的方式是 通过key进行查询value 的值,这种使用方式类似于数组的使用

multimap:key的取值不是唯一的是可以重复的

vector 是只有一个模版参数的模版类

vector<type>

multimap:每一个value可以是重复的 就这一点和map不相同,其他的全相同。

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

基于hash _table 的容器

 unordered map(not sorted)

map所有的操作都适用于underedmap

当知道自己要存储的data的时候,可以提前进行data_base 的提前reserve,这样可以避免多次的memory copy

undered  set

 容器选择:

 优先队列:

 

原文地址:https://www.cnblogs.com/yykyykyyk/p/14530487.html