std :: unordered_map的以下命令之间是否有任何区别

时间:2018-11-12 01:07:52

标签: c++ stl insert 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[]有何区别?

2 个答案:

答案 0 :(得分:2)

  

map1 [2] = 5;

如果存在键为body("{" + "\"OrderReferenceNumber\": \"" + generateRandomNumber(3) + "\"," + "\"Recipient\": {" + "}}") 的条目,则将该条目的值设置为2。否则,请使用键5和值2创建一个新条目。


  

map1.insert({2,5});

如果不存在键为5的条目,请创建一个键为2和值为2的新条目。否则,不执行任何操作


  

mappedVal = map1.at(2);

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


  

mappedVal = map1 [2];

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


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

答案 1 :(得分:1)

template<int DEPTH> class shift_register{ int registers[DEPTH]; ... }; 相比,如果密钥不存在,operator[]将引发at()异常。 std::out_of_range将代替创建密钥。