在 C++ 中的 Map 中插入重复值时会发生什么

迪维亚
void main()
{

    std::map<int,int>keyValueMap;
    keyValueMap.insert(0,1);
    keyValueMap.insert(0,2);

    int index = keyValueMap.begin()->second;

}

此时 index 的值是 1 而不是 2 有人可以解释为什么吗?

雷米勒博

所有 2 参数重载都std::map::insert()需要迭代器,而不是键/值对。

大多数标准容器insert()方法将容器value_type作为输入。value_typestd::mapstd::pair因此,在将键/值对插入 a 时std::map,您必须将它们insert()作为 a传入std::pair,例如:

void main()
{
    std::map<int,int> keyValueMap;

    keyValueMap.insert(std::make_pair(0, 1));
    keyValueMap.insert(std::make_pair(0, 2));

    int index = keyValueMap.begin()->second;
}

现在,话虽如此,第二个insert()仍然不会覆盖第一个的值insert(),即使它们都具有相同的 key 0第二个插入将被忽略:

如果容器尚未包含具有等效键的元素则将元素插入到容器中。

...

返回值

1-3) 返回由iterator插入元素(或阻止插入的元素)的 和 bool 表示插入是否发生的对。

要用第二个值覆盖第一个值,您可以:

  • 使用insert()返回的迭代器

    void main()
    {
        std::map<int,int> keyValueMap;
    
        keyValueMap.insert(std::make_pair(0, 1));
    
        auto ret = keyValueMap.insert(std::make_pair(0, 2));
        if (!ret.second) ret.first->second = 2;
    
        int index = keyValueMap.begin()->second;
    }
    
  • 改用地图operator[]

    void main()
    {
        std::map<int,int> keyValueMap;
    
        keyValueMap[0] = 1;
        keyValueMap[0] = 2;
    
        int index = keyValueMap.begin()->second;
    }
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C ++中,在数组之前添加“ ++”会发生什么?

来自分类Dev

C ++中的函数const本地对象会发生什么?

来自分类Dev

在C ++中,等效于<map>的C#?

来自分类Dev

在C中递归期间数组会发生什么?

来自分类Dev

在C ++标准中,当违反“应”要求时会发生什么?

来自分类Dev

在C ++中,当我对-128,127范围以外的整数使用static_cast <char>时会发生什么?

来自分类Dev

为什么Web服务中的方法在C#中返回Arraylist时会发生异常?

来自分类Dev

当我在C ++中对未初始化的指针调用“删除”时会发生什么?

来自分类Dev

当非void方法在Objective-C中达到终点时会发生什么?

来自分类Dev

int a = int(); C ++ 98中会发生什么?

来自分类Dev

当我们在C#中访问字符串的'Length'属性时会发生什么?

来自分类Dev

当没有内存在C#中构造OutOfMemoryException时会发生什么?

来自分类Dev

当软件包在源中重复时会发生什么?

来自分类Dev

从C ++中的unordered_map访问值

来自分类Dev

当将int列表转换为C中的char列表时会发生什么?

来自分类Dev

在svm.scv()中同时使用“ class_weight”和“ c”参数时会发生什么?

来自分类Dev

当用C中的空字符截断字符串时会发生什么?

来自分类Dev

当软件包在源中重复时会发生什么?

来自分类Dev

C ++中的函数const本地对象会发生什么?

来自分类Dev

从字典中删除值(对象)时会发生什么?

来自分类Dev

当非void方法在Objective-C中达到终点时会发生什么?

来自分类Dev

在C ++中返回Obj&,临时指针会发生什么?

来自分类Dev

在C ++中为对象分配引用的值时会发生什么?

来自分类Dev

当我在C ++中对类使用vector时会发生什么

来自分类Dev

在 C 中,当开始不满足 for 循环的条件时会发生什么?

来自分类Dev

堆栈中的 C++ 类对象作为 Map 的值插入

来自分类Dev

在 C++ 中为对象赋值时会发生什么

来自分类Dev

C++ 在 Map 中某个类的一组值中插入一个值

来自分类Dev

在 C# 中,移除对象的 Action 会发生什么?

Related 相关文章

  1. 1

    在C ++中,在数组之前添加“ ++”会发生什么?

  2. 2

    C ++中的函数const本地对象会发生什么?

  3. 3

    在C ++中,等效于<map>的C#?

  4. 4

    在C中递归期间数组会发生什么?

  5. 5

    在C ++标准中,当违反“应”要求时会发生什么?

  6. 6

    在C ++中,当我对-128,127范围以外的整数使用static_cast <char>时会发生什么?

  7. 7

    为什么Web服务中的方法在C#中返回Arraylist时会发生异常?

  8. 8

    当我在C ++中对未初始化的指针调用“删除”时会发生什么?

  9. 9

    当非void方法在Objective-C中达到终点时会发生什么?

  10. 10

    int a = int(); C ++ 98中会发生什么?

  11. 11

    当我们在C#中访问字符串的'Length'属性时会发生什么?

  12. 12

    当没有内存在C#中构造OutOfMemoryException时会发生什么?

  13. 13

    当软件包在源中重复时会发生什么?

  14. 14

    从C ++中的unordered_map访问值

  15. 15

    当将int列表转换为C中的char列表时会发生什么?

  16. 16

    在svm.scv()中同时使用“ class_weight”和“ c”参数时会发生什么?

  17. 17

    当用C中的空字符截断字符串时会发生什么?

  18. 18

    当软件包在源中重复时会发生什么?

  19. 19

    C ++中的函数const本地对象会发生什么?

  20. 20

    从字典中删除值(对象)时会发生什么?

  21. 21

    当非void方法在Objective-C中达到终点时会发生什么?

  22. 22

    在C ++中返回Obj&,临时指针会发生什么?

  23. 23

    在C ++中为对象分配引用的值时会发生什么?

  24. 24

    当我在C ++中对类使用vector时会发生什么

  25. 25

    在 C 中,当开始不满足 for 循环的条件时会发生什么?

  26. 26

    堆栈中的 C++ 类对象作为 Map 的值插入

  27. 27

    在 C++ 中为对象赋值时会发生什么

  28. 28

    C++ 在 Map 中某个类的一组值中插入一个值

  29. 29

    在 C# 中,移除对象的 Action 会发生什么?

热门标签

归档