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

时间:2012-12-18 10:50:09

标签: c++ stl vector key std

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

如果没有,有什么区别?

3 个答案:

答案 0 :(得分:5)

Vector是数组周围的容器。

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

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

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:3)

不,vector中的索引是连续的,而map中的索引不是必需的。

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

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