为什么std :: map :: insert不能使用键和值而不是std :: pair?

时间:2015-12-12 16:04:44

标签: c++ c++11 interface stl containers

std :: map具有成员函数

template <class P> pair<iterator,bool> insert (P&& val);
我们使用的

像这样:

my_map.insert(std::make_pair(k, v));

问题是,为什么没有insert()的变体只需要一个密钥和一个值,即

pair<iterator,bool> insert (K&& key, V&& value);

(当然K和V是地图的模板参数)我们将使用例如像这样:

my_map.insert(k, v);

在我看来,完全合理。

2 个答案:

答案 0 :(得分:2)

在C ++ 11中添加了所有容器的emplace成员,map具有签名

template< class... Args >
std::pair<iterator,bool> emplace( Args&&... args );

答案 1 :(得分:0)

如果您正在寻找更明显的语法,您可以使用键和值作为单独的实体执行相同的插入,如下所示:

my_map[k] = v;

当然,这是两个独立的操作。插入后跟一个赋值,因此它可能不如单个插入一样有效。但是,地图商店再次将其条目存储为成对,因此调用insert(k, v)函数可能最终会创建pair<k, v>