安置地图的标准方法是什么?

时间:2014-04-14 08:14:55

标签: c++ c++11

标准似乎有点broken,所以据我所知,只留下了这种“正确”的方式,用{{1}的非一元构造函数来安置地图}(from cppreference):

Type

由于这很丑陋,我想知道是否有一种标准的,好的方式来放置不需要调用std::map<std::string, std::string> m; // uses pair's piecewise constructor (overload 6) m.emplace(std::piecewise_construct, std::forward_as_tuple("c"), std::forward_as_tuple(10, 'c')); 的复制构造函数的地图元素。目前我这样做:

Type

但这并不特别感觉 emplacy 。还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

emplace中的std::map<K,T>参数会转发给std::pair<const K, V>构造函数。这意味着您只能使用ones

正如您将看到的,您无法改进语法,唯一的可变参数构造是您在第一个代码段中使用的构造。所有其他内容都需要已完成KV

答案 1 :(得分:0)

m.emplace("c",std::string(10, 'c'));有什么问题? std::map需要存储std::pair来保存密钥和值。调用m.emplace(A,B)看起来非常合理,可以指定键(1.参数)和值(2.参数)。

当构造键和/或值不仅需要一个而是多个参数时,它变得棘手。然后你必须使用你的问题中提到的分段构造函数。通常不可能使用可变参数模板函数来构造两个对象。