12

map::emplace で見つけることができるすべての例は、単一の引数を取るコンストラクターを持つかなり単純な型を使用しています。

std::map<std::string, std::string> foo;
foo.emplace("a", "b");

値型コンストラクターに 2 つのパラメーターが必要であるとします。一体、本当に簡単にしましょう。値のタイプが であるとします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);

少なくとも、g++ 4.8.2 では大声で失敗します。これは C++11 でも可能ですか?

4

1 に答える 1

13

私のサーチフーは弱かった。これは、別のスタックオーバーフローの質問で、非常に詳細に説明されています。

簡単な答え:

foo.emplace(std::piecewise_construct,
            std::forward_as_tuple("a"),
            std::forward_as_tuple("b", 1.0));
于 2015-04-30T22:16:16.877 に答える