【发布时间】:2015-09-26 19:31:14
【问题描述】:
我很难理解 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 不允许多个键映射到一个值,并且多映射到期。这是真的吗?
2) 为什么 Peter 和 George 可以以 4 的值共存?第二个乔治怎么了?就此而言,如果这是无序的,为什么当我从 begin() 迭代到 end() 时 George 首先出现?
3) 无序映射与无序多映射的底层表示是什么?
4) 有没有办法在不提供值的情况下将键插入任一映射?例如。让编译器创建自己的哈希函数,当我检索键并查找冲突时我不需要担心?
【问题讨论】:
-
我认为你应该阅读更多关于映射与集合的内容,将映射键映射到值,集合,然而,只存储东西。
-
地图不允许重复键,而多地图允许。两者都不关心是否有重复的值 - 只有键很重要。他们通常甚至不知道如何比较值 - 您可以将一个类作为未定义
operator==或operator<的值。
标签: c++ hashmap hashtable unordered-map multimap