向量是带有整数键的unordered_map的特殊形式吗?看起来是这样,因为矢量也有整数键。
如果没有,有什么区别?
答案 0 :(得分:5)
Vector是数组周围的容器。
无序映射是二叉树周围的容器。
这意味着它们具有不同的性能特征。一些例子:
答案 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
。
这两者对于两者的大多数操作都意味着不同的复杂性。