std::unordered_map 中的以下命令之间有什么区别吗?

Is there any difference between the following commands from std::unordered_map

提问人:24n8 提问时间:11/12/2018 最后编辑:24n8 更新时间:11/12/2018 访问量:320

问:

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

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

使用 或 有什么区别吗?std_unordered_insertoperator[]

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

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

同样,使用 or 之间有什么区别吗?std::unordered_map::atoperator[]

C++ STL 插入 无序映射

评论


答:

2赞 Swordfish 11/12/2018 #1

与 相反,如果键不存在,则会引发异常。 将改为创建密钥。operator[]at()std::out_of_rangeoperator[]

评论

0赞 24n8 11/12/2018
谢谢。所以我认为这意味着,如果我想在我“认为”是现有键的地方找到值,那么使用它会更安全?at()
3赞 Sid S 11/12/2018 #2

地图1[2]=5;

如果存在带键的条目,请将该条目的值设置为 。否则,创建一个具有 key 和 value 的新条目。2525


地图1.插入({2,5});

如果不存在带键的条目,则创建一个带有键和值的新条目。否则,不执行任何操作225


映射Val = map1.at(2);

如果存在带键的条目,请将其值赋给 。否则,将引发异常。2mappedValout_of_range


mappedVal = 地图1[2];

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


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