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_insert
和operator[]
有什么区别吗?
如果我想找到给定键的映射值,我可以使用以下任一方法吗:
mappedVal = map1.at(2);
mappedVal = map1[2];
同样,使用 std::unordered_map::at
或 operator[]
有什么区别?
与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 [] ()
(除非我知道给定键有一个条目)。
为了将键值对插入无序映射,例如std::unordered_pair<int,int> map1
,我们可以通过以下两种方式中的任何一种来实现:
map1[2]=5;
map1.insert({2,5});
使用std_unordered_insert
和operator[]
有什么区别吗?
如果我想找到给定键的映射值,我可以使用以下任一方法吗:
mappedVal = map1.at(2);
mappedVal = map1[2];
同样,使用 std::unordered_map::at
或 operator[]
有什么区别?
与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 [] ()
(除非我知道给定键有一个条目)。