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) 有没有一种方法可以在不提供值的情况下将键插入任一贴图?例如,让编译器创建自己的哈希函数,我在检索密钥和查找冲突时不必担心这些函数

我会简短地说:

  • 不,多。。。指的是钥匙。(非多重)贴图不能有多个具有不同值的等效键,即每个键最多有一个值。一个多地图可以。无序版本也是如此
  • 彼得George,这就是为什么它们有不同的键,很可能有相同的值
  • 哈希映射
  • 使用集合

  • 在您的示例中,将跳过使用(非multi)键对George进行的第二次插入,因为之前插入了相同的键。

    我将把它简化为:

  • 不,多。。。指的是钥匙。(非多重)贴图不能有多个具有不同值的等效键,即每个键最多有一个值。一个多地图可以。无序版本也是如此
  • 彼得George,这就是为什么它们有不同的键,很可能有相同的值
  • 哈希映射
  • 使用集合

  • 在您的示例中,将跳过使用(非multi)键对George进行的第二次插入,因为之前插入了相同的键。

    我将把它简化为:

  • 不,多。。。指的是钥匙。(非多重)贴图不能有多个具有不同值的等效键,即每个键最多有一个值。一个多地图可以。无序版本也是如此
  • 彼得George,这就是为什么它们有不同的键,很可能有相同的值
  • 哈希映射
  • 使用集合

  • 在您的示例中,将跳过使用(非multi)键对George进行的第二次插入,因为之前插入了相同的键。

    我将把它简化为:

  • 不,多。。。指的是钥匙。(非多重)贴图不能有多个具有不同值的等效键,即每个键最多有一个值。一个多地图可以。无序版本也是如此
  • 彼得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”

    要插入而不提供值,需要的是集合,而不是映射


    “无序”事物的底层结构是哈希表。

    我认为您应该阅读更多关于映射与集合的内容,将键映射到值上,但是集合只存储事物。映射不允许重复键,而多重映射允许重复键。谁也不在乎这是什么