c++ - 具有整数键的映射与 vector 之间的区别

标签 c++ stl vector key std

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

如果不是,有什么区别?

最佳答案

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

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

关于c++ - 具有整数键的映射与 vector 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13931325/

相关文章:

java - Row 不会使用 vector 添加到我的 JTable 的末尾

r - 计算 r 中多个向量中 NA 的出现次数

C++ 相当于 .ToString()

c++ - 读取文本文件并随机播放

c++ - C++中如何从map的迭代器中调用类成员函数?

c++ - 检查二维 vector 中是否存在元素

c++ - 简单的C++指针混淆

c++ - 通过将指向 "this"的指针传递给基本构造函数来消除 C++ 菱形继承

C++ STL : Why do STL data structures not provide a function for measuring the memory consumption?

c++ - 我的虚函数无法工作 C++