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

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

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

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

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

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

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

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

operator[]相反,如果键不存在,at()将抛出std::out_of_range异常。 operator[] 将改为创建密钥。

map1[2]=5;

如果存在键为 2 的条目,则将该条目的值设置为 5。否则,使用键 2 和值 5.

创建一个新条目

map1.insert({2,5});

如果不存在键 2 的条目,则创建一个键 2 和值 5 的新条目。否则,什么也不做


mappedVal = map1.at(2);

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


mappedVal = map1[2];

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


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