Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 插入地图的两种方法之间的差异_C++_Stl_Map - Fatal编程技术网

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) 默认构造会浪费一点时间。可能会重复