为什么std :: map需要一对?

MK.*_*MK. 2 c++ stl

那个语法:

std::map<int, int> m;
m.insert(std::make_pair(1, 42));
Run Code Online (Sandbox Code Playgroud)

看起来有点疯狂.

为什么没有其他insert(K k, V v)方法可以提供更好的方法:

std::map<int, int> m;
m.insert(1, 42);
Run Code Online (Sandbox Code Playgroud)

是的,我知道m[1] = 42,但它有自己的问题(创建值对象的额外副本).

Fra*_*eux 5

我无法告诉你为什么不允许这种结构.也许保持insert类似于其他容器的insert方法.但是,从c ++ 11开始,map :: emplace可以满足您的需求.

std::map<int, int> m;
m.emplace(1, 42);
Run Code Online (Sandbox Code Playgroud)