C++ 插入地图的两种方法之间的差异
我被要求用两种方法在地图上插入记录C++ 插入地图的两种方法之间的差异,c++,stl,map,C++,Stl,Map,我被要求用两种方法在地图上插入记录 mymap["foo"] = 123; mymap.insert("foo", 123); 除了语法之外,这两者之间有什么区别吗?有,如果存在键“foo”,则通过[]的第一个选项将覆盖键“foo”存储的值,然而,如果密钥已经存在,insert将无法插入数据,并将在其返回值中指示成功或失败。除了Timo的优秀答案之外-- 如果“foo”处不存在元素,则第一个将首先在“foo”位置默认构造一个值,然后使用对默认构造的“foo”值的引用,将123分配给该位置 正
mymap["foo"] = 123;
mymap.insert("foo", 123);
除了语法之外,这两者之间有什么区别吗?有,如果存在键“foo”,则通过
[]
的第一个选项将覆盖键“foo”存储的值,然而,如果密钥已经存在,insert
将无法插入数据,并将在其返回值中指示成功或失败。除了Timo的优秀答案之外--
如果“foo”处不存在元素,则第一个将首先在“foo”位置默认构造一个值,然后使用对默认构造的“foo”值的引用,将123分配给该位置
正在做
mymap["foo"]
将导致默认构造一个值并将其放置在“foo”位置。所以在做这件事时要小心
int value = mymap["foo"]
因为它会起作用,即使您从未在foo显式地分配或插入,上述操作的含义也相当明显:1)使用索引
运算符[]
需要值类型
支持默认构造,而您可以插入()
。2) 默认构造会浪费一点时间。可能会重复