为什么 std::map::insert 不能接受键和值而不是 std::p air?



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);

在我看来,这样做完全合理。

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

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

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

my_map[k] = v;

诚然,这是两项独立的行动。后面跟着赋值的插入,所以它可能不如单个插入有效。但话说回来,映射将它们的条目成对存储,因此对insert(k, v)函数的调用可能最终会创建pair<k, v>

相关内容

最新更新