插入地图的两种方式之间的差异

sky*_*oor 4 c++ stl map

我被问到两种方法将记录插入地图,

mymap["foo"] = 123;

mymap.insert("foo", 123);
Run Code Online (Sandbox Code Playgroud)

除了语法之外,这两者之间有什么区别吗?

Tim*_*sch 8

[]如果存在密钥"foo",则第一个选项via 将覆盖存储在密钥"foo"中的值,而insert如果密钥已经存在则将无法插入数据,并且将指示其返回值的成功或失败.


Dou*_* T. 7

除了蒂莫的出色回答 -

如果"foo"中没有元素,则第一个将默认在"foo"位置构造一个值,然后使用对默认构造的"foo"值的引用,将123分配给该位置.

干得好

mymap["foo"]
Run Code Online (Sandbox Code Playgroud)

将导致值默认构造并放置在"foo"位置.这样做时要小心

int value = mymap["foo"]
Run Code Online (Sandbox Code Playgroud)

因为它会起作用,即使你从未明确指定或插入foo