STL中常用容器操作时间复杂度小结

太过爱你忘了你带给我的痛 2022-12-11 02:26 274阅读 0赞

map, set, multimap, and multiset采用红黑树实现,红黑树是平衡二叉树的一种。不同操作的时间复杂度近似为:

  • 插入: O(logN)
  • 查看:O(logN)
  • 删除:O(logN)

hash_map, hash_set, hash_multimap, and hash_multiset采用哈希表实现,不同操作的时间复杂度为:

  • 插入:O(1),最坏情况O(N)。
  • 查看:O(1),最坏情况O(N)。
  • 删除:O(1),最坏情况O(N)。

vector从名字看,随机访问的复杂度应该是O(1)

  • 插入 insert vector O(n)
  • 插入 push_back vector O(1)
  • 删除 pop_back vector O(1)
  • 删除 erase vector O(n)
  • 查找特点元素的时间复杂度 O(n)

LinkedList 底层是双链表

  • get() 获取第几个元素,依次遍历,复杂度O(n)
  • add(E) 添加到末尾,复杂度O(1)
  • add(index, E) 添加第几个元素后,需要先查找到第几个元素,直接指针指向操作,复杂度O(n)
  • remove()删除元素,直接指针指向操作,复杂度O(1)

说明:
STL中vector,push_back的时间复杂度为常数

因为:假定有 n 个元素,倍增因子为 m。那么完成这 n 个元素往一个 vector 中的push_back​操作,需要重新分配内存的次数大约为 logm(n),第 i 次重新分配将会导致复制 m^i (也就是当前的vector.size() 大小)个旧空间中元素,因此 n 次 push_back操作所花费的总时间约为 n*m/(m - 1):

那么 n 个元素,n 次操作,每一次操作需要花费时间为 m / (m - 1),这是一个常量.

发表评论

表情:
评论列表 (有 0 条评论,274人围观)

还没有评论,来说两句吧...

相关阅读

    相关 STL容器操作示例

    STL(Standard Template Library)是C++中非常强大和常用的库之一,其中包含了多种容器用于存储和操作数据。本文将介绍STL中常用容器的操作示例,并附上

    相关 STL容器浅析

      STL是C/C++开发中一个非常重要的模板,而其中定义的各种容器也是非常方便我们大家使用。下面,我们就浅谈某些常用的容器。这里我们不涉及容器的基本操作之类,只是要讨论一下各

    相关 STL 容器小结

    顺序容器:为程序员提供了控制元素存储和访问顺序的能力。这种顺序不依赖于元素的值,而是与元素加入容器是的位置相对应。 顺序容器几乎可以保存任意类型的元素。Eg: vector<