4

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

如果不是,有什么区别?

4

2 回答 2

6

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

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

于 2012-12-18T10:58:51.857 回答
3

不, a 中的索引vector是连续的,在 a 中map它们不必是连续的。

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

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

于 2012-12-18T10:52:09.377 回答