带有整数键和向量的地图之间的区别

Difference Between Map with Integer Key and Vector

提问人:danijar 提问时间:12/18/2012 更新时间:12/18/2012 访问量:7178

问:

向量是带有整数键的unordered_map的特殊形式吗?之所以如此,是因为向量也有整数键。

如果不是,有什么区别?

C++ STL 向量 std

评论


答:

4赞 Luchian Grigore 12/18/2012 #1

不,a 中的索引是连续的,而 a 中的索引不一定是连续的。vectormap

此外,保证 a 中的值位于连续内存中,而不是 .vectormap

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

7赞 yiding 12/18/2012 #2

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

A 将数据存储在内部数组中,该数组会调整大小并添加更多元素。 An 在内部使用哈希表。vectorunordered_map

实际上,a 在后面为您提供摊销的恒定时间插入(它需要偶尔调整大小和复制/移动所有内容)、按索引访问的恒定时间,以及线性时间插入和删除(所有后续元素都必须移动)。此外,由于 a 是连续的,因此您可以将其传递给需要 c 样式数组的函数。vectorvector

unordered_map按键提供摊销的常量时间查找(因为哈希并不完美,并且冲突会强制查找遍历内部链表),摊销常量时间插入和删除。

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