map <K,V> ::\templace,其中V构造函数需要两个参数

jzi*_*ons 5 dictionary emplace

我可以为map :: emplace找到的所有示例都使用相当简单的类型,这些类型具有采用单个参数的构造函数,例如

std::map<std::string, std::string> foo;
foo.emplace("a", "b");
Run Code Online (Sandbox Code Playgroud)

假设值类型构造函数需要两个参数.哎呀,让我们真的变得简单; 假设值类型是std::pair<std::string, double>.如何使用std::map<string, pair<string, double> >::emplace()在地图中就地构建值类型?

我知道这不起作用:

std::map<std::string, std::pair<std::string, double> > foo;
foo.emplace("a", "b", 1.0);
Run Code Online (Sandbox Code Playgroud)

至少,它在g ++ 4.8.2上大声失败.这对C++ 11来说甚至可能吗?

jzi*_*ons 7

我的搜索功能很弱.实际上,这是在另一个stackoverflow问题中以极好的和有启发性的细节回答的.

简短的回答:

foo.emplace(std::piecewise_construct,
            std::forward_as_tuple("a"),
            std::forward_as_tuple("b", 1.0));
Run Code Online (Sandbox Code Playgroud)