要将键值对插入到无序映射(例如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[]
有何区别?
答案 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
将代替创建密钥。