繁体   English   中英

使用整数键和向量的映射之间的差异

[英]Difference Between Map with Integer Key and Vector

向量是带有整数键的unordered_map的特殊形式吗? 看起来是这样,因为矢量也有整数键。

如果没有,有什么区别?

Vector是一个数组周围的容器。

无序映射是二叉树周围的容器。

这意味着它们具有不同的性能特征。 一些例子:

  • 通过索引访问元素是向量/数组中的常量时间操作,但是是二叉树中的对数时间操作。 两者都很便宜,但在矢量上它甚至更快。
  • 增加向量的容量是昂贵的(线性时间),但对于二叉树来说是便宜的(对数时间)。

主要区别在于数据的存储方式。

vector将数据存储在调整大小的内部数组中,并添加更多元素。 unordered_map在内部使用哈希表。

实际上, vector为您提供在后面分配的常量时间插入(它需要一次调整大小并复制/移动所有内容),通过索引进行常量时间访问,以及最多线性时间插入和删除(所有后续元素必须转移)。 此外,由于vector是连续的,您可以将其传递给期望c样式数组的函数。

unordered_map为您提供按密钥分摊的常量时间(因为散列不完美,并且冲突会强制查找遍历内部链接列表),分摊的常量时间插入和删除。

请参阅: http//en.cppreference.com/w/cpp/container/unordered_map和: http//en.cppreference.com/w/cpp/container/vector

不, vector中的索引是连续的,在map它们不一定是。

此外, vector中的值保证在连续内存中,而不是在map

这两者对于两者的大多数操作意味着不同的复杂性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM