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

时间:2017-01-06 20:53:13

标签: c++ stl

语法:

std::map<int, int> m;
m.insert(std::make_pair(1, 42));

似乎有点疯狂。

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

std::map<int, int> m;
m.insert(1, 42);

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

2 个答案:

答案 0 :(得分:5)

我无法告诉你为什么不允许这种结构。也许是为了让insert与其他容器保持相似&#39; insert方法。但是,从c ++ 11开始,map::emplace可以满足您的需要。

std::map<int, int> m;
m.emplace(1, 42);

答案 1 :(得分:-2)

Order.last_from_this_year强制复制这两个参数;而m.insert(x, y);允许调用获得m.insert(std::make_pair(1, 42));,避免所有复制。这样,const& pair可以包含不可复制的对象(或重型复制对象)