13

次のように、(かなり)単純なキータイプと複雑なマップタイプのマップがあります。

map<string, vector<string>> myMap;

手元にある場合vector<string>、キーをコピーするがマップされた値を移動するエントリをマップに挿入することは可能ですか?つまり、次のような方法がありますか。

string key = "Key";
vector<string> mapped;
for (int i = 0; i < 1000; ++i)
  mapped.push_back("Some dynamic string");

// Insert by moving mapped; I know I'm done with it
myMap.insert(make_pair(key, move(mapped))); // This seems to move key too
4

1 に答える 1

26

あなたが探しているstd::map::emplace

myMap.emplace(key, move(mapped));

std::pairこれにより、適切なコンストラクターがインプレースで呼び出されます。

template< class U1, class U2 >
pair( U1&& x, U2&& y );

最初の引数はl値であるため、キーはコピーされますが、2番目の(マップされた)引数は右辺値であり、したがってmove-constructedになります。

于 2013-01-29T11:19:17.323 に答える