首页 > 解决方案 > 来自 std::unordered_map 的以下命令之间是否有任何区别

问题描述

要将键值对插入到无序映射中,例如 ,std::unordered_pair<int,int> map1我们可以通过以下两种方式中的任何一种来完成:

map1[2]=5;
map1.insert({2,5});

std_unordered_insert使用or有什么区别operator[]吗?

如果我想找到给定键的映射值,我可以使用以下任一方法:

mappedVal = map1.at(2);
mappedVal = map1[2];

std::unordered_map::at同样,使用or之间有什么区别operator[]

标签: c++stlinsertunordered-map

解决方案


地图1[2]=5;

如果存在带有键的条目2,则将该条目的值设置为5。否则,使用 key2和 value创建一个新条目5


map1.insert({2,5});

如果不存在带有 key的条目,则使用 key和 value2创建一个新条目。否则,什么也不做25


映射值 = map1.at(2);

如果存在带有键的条目,则将2其值分配给mappedVal。否则,抛出out_of_range异常。


映射值 = map1[2];

如果存在带有键的条目,2则将其值分配给 mappedVal。否则,创建一个2使用默认值的条目并将该默认值分配给 mappedVal。


对于查找,我通常使用unordered_map::find()而不是at()operator [] ()(除非我知道给定键有一个条目)。


推荐阅读