c++中unordered_maps与unordered_multimaps的底层存储和功能
Underlying storage and functionality of unordered_maps vs unordered_multimaps in C++?
我很难理解unordered_maps和unordered_multimaps,因为我的测试代码没有产生我所期望的结果。
std::unordered_map<string, int> names;
names.insert(std::make_pair("Peter", 4));
names.insert(std::make_pair("George", 4));
names.insert(std::make_pair("George", 4));
当我遍历这个列表时,我首先得到一个George的实例,然后是Peter。
1)这是我的理解unordered_maps不允许多个键映射到一个值,并且multimaps到期。这是真的吗?
2)为什么Peter和George可以在值为4时共存?第二个乔治发生了什么事?对于这个问题,如果这是无序的,为什么当我从begin()迭代到end()时,George首先出现?
3)无序映射和无序multimap的底层表示是什么?
4)是否有一种方法可以在不提供值的情况下将键插入到映射中?例如,编译器创建自己的哈希函数,我不需要担心当我检索键和寻找碰撞?
我尽量短一点:
- 。多……指键。一个(非多)映射不能有多个具有不同值的等价键。每个键最多有一个值。一个多地图可以。对于无序的版本也是如此。
-
Peter != George
,这就是为什么它们有不同的键,可能有相同的值。 - hashmap。
- 使用集。
在您的示例中,使用(非多)键对George
的第二次插入将被跳过,因为之前插入了相同的键。
您希望使用unordered_multimap拥有多个相同的键。
因为这是无序的,你不能真的希望有任何特定的顺序,因为它取决于哈希函数。
如果你想要插入东西的顺序,你需要使用std::vector。即使是法线映射,它应该是有序的,也意味着比较顺序,而不是你插入事物的顺序,例如字符串"AB"出现在"BB"之前,因为"A"小于"B"。
要插入而不提供值,需要一个set,而不是map。
"unordered_"的底层结构是哈希表
相关文章:
- 将字符串存储在c++中的稳定内存中
- std::原子加载和存储都需要吗
- C++:将控制台输出存储在宏中更好吗
- 使用QProcess执行命令,并将结果存储在QStringList中
- 访问存储在向量C++中的结构的多态成员
- 如何从存储在std::映射中的std::集中删除元素
- 存储模板类型以强制转换回派生<T>
- 类型总是使用其大小存储在内存中吗
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 使用无符号字符数组有效存储内存
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 带结构的二维矢量:如何存储元素
- 添加存储在向量中的大整数的函数出现问题
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 在std::vector上存储带有模板的类实例
- 谷歌测试中的期望值存储在哪里
- 为什么C中的通用链表中存储的数据已损坏
- 在c++中获取两个大int,并将它们存储在数组中
- 在reactor中存储eventHandlers的最佳方式是什么