向量是具有整数键的 unordered_map 的特殊形式吗?之所以如此,是因为向量也有整数键。
如果不是,有什么区别?
主要区别在于数据的存储方式。
Avector
将数据存储在它调整大小的内部数组中,您可以添加更多元素。Anunordered_map
在内部使用哈希表。
实际上,avector
在后面为您提供了分摊的恒定时间插入(它需要不时调整大小和复制/移动所有内容),按索引进行恒定时间访问,以及线性时间插入和删除(所有后续元素都必须是转移)。此外,由于 avector
是连续的,您可以将它传递给期望 c 样式数组的函数。
unordered_map
通过键为您提供摊销的常数时间查找(因为散列并不完美,并且冲突迫使查找遍历内部链表),摊销的常数时间插入和删除。
请参阅:http ://en.cppreference.com/w/cpp/container/unordered_map 和:http ://en.cppreference.com/w/cpp/container/vector
不, a 中的索引vector
是连续的,在 a 中map
它们不必是连续的。
此外, avector
中的值保证在连续内存中,而不是在 a 中map
。
这两个意味着对两者的大多数操作具有不同的复杂性。