C++ C+中无序#u映射与无序#u多重映射的底层存储和功能+;?
我很难对无序的映射和无序的多重映射绞尽脑汁,因为我的测试代码没有产生我所期望的结果C++ C+中无序#u映射与无序#u多重映射的底层存储和功能+;?,c++,hashmap,hashtable,unordered-map,multimap,C++,Hashmap,Hashtable,Unordered Map,Multimap,我很难对无序的映射和无序的多重映射绞尽脑汁,因为我的测试代码没有产生我所期望的结果 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)); std::无序的地图名称; 名称。插入(标准::配对(“彼得”
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));
std::无序的地图名称;
名称。插入(标准::配对(“彼得”,4));
名称。插入(std::make_pair(“George”,4));
名称。插入(std::make_pair(“George”,4));
当我遍历这个列表时,首先得到一个George的实例,然后是Peter
1) 据我所知,无序的_映射不允许多个键映射到一个值,而多个映射是应该的。这是真的吗
2) 为什么彼得和乔治能以4的值共存?第二个乔治怎么了?就这一点而言,如果这是无序的,为什么在我从begin()迭代到end()时George会首先出现
3) 无序映射与无序多重映射的基本表示是什么
4) 有没有一种方法可以在不提供值的情况下将键插入任一贴图?例如,让编译器创建自己的哈希函数,我在检索密钥和查找冲突时不必担心这些函数 我会简短地说:
在您的示例中,将跳过使用(非multi)键对George进行的第二次插入,因为之前插入了相同的键。我将把它简化为:
在您的示例中,将跳过使用(非multi)键对George进行的第二次插入,因为之前插入了相同的键。我将把它简化为:
在您的示例中,将跳过使用(非multi)键对George进行的第二次插入,因为之前插入了相同的键。我将把它简化为:
在您的示例中,将跳过使用(非多重)对George进行的第二次插入,因为先前插入了相同的键。您希望使用无序的多重映射来拥有多个相同的键 因为这是无序的,所以你不能期望有任何特定的顺序,因为它依赖于散列函数 如果您想要按顺序插入内容,则需要使用std::vector。即使是应该排序的法线贴图也暗示了比较顺序,而不是插入内容的顺序,例如字符串“AB”位于“BB”之前,因为“A”小于“B” 要插入而不提供值,需要的是集合,而不是映射
“无序”事物的底层结构是哈希表。您希望使用无序多映射来拥有多个相同的键 因为这是无序的,所以你不能期望有任何特定的顺序,因为它依赖于散列函数 如果您想要按顺序插入内容,则需要使用std::vector。即使是应该排序的法线贴图也暗示了比较顺序,而不是插入内容的顺序,例如字符串“AB”位于“BB”之前,因为“A”小于“B” 要插入而不提供值,需要的是集合,而不是映射
“无序”事物的底层结构是哈希表。您希望使用无序多映射来拥有多个相同的键 因为这是无序的,所以你不能期望有任何特定的顺序,因为它依赖于散列函数 如果您想要按顺序插入内容,则需要使用std::vector。即使是应该排序的法线贴图也暗示了比较顺序,而不是插入内容的顺序,例如字符串“AB”位于“BB”之前,因为“A”小于“B” 要插入而不提供值,需要的是集合,而不是映射
“无序”事物的底层结构是哈希表。您希望使用无序多映射来拥有多个相同的键 因为这是无序的,所以你不能期望有任何特定的顺序,因为它依赖于散列函数 如果您想要按顺序插入内容,则需要使用std::vector。即使是应该排序的法线贴图也暗示了比较顺序,而不是插入内容的顺序,例如字符串“AB”位于“BB”之前,因为“A”小于“B” 要插入而不提供值,需要的是集合,而不是映射
“无序”事物的底层结构是哈希表。我认为您应该阅读更多关于映射与集合的内容,将键映射到值上,但是集合只存储事物。映射不允许重复键,而多重映射允许重复键。谁也不在乎这是什么