Вход карты вставки перемещением r-стоимости mapped_type

У меня есть карта с (довольно) простым ключевым типом и сложным нанесенным на карту типом, как так:

map> myMap;

If I have a vector in hand, is it possible to insert an entry into the map which copies the key but moves the mapped-value? That is, is there some way to do:

string key = "Key";
vector 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
7
nl ja de
Вопрос, куда вы собираетесь переместить свой нанесенный на карту тип в? Это won' t существуют в карте, если вы ранее не создали ее там.
добавлено автор Tony The Lion, источник
@TonyTheLion - <у кода> вектор есть конструктор движения, правильно? I' d как пара <последовательность, вектор> в карте, чтобы построить ее векторную часть движением.
добавлено автор Chowlett, источник
@billz - что, и справляются с памятью alloc-dealloc вручную? Нет, спасибо. I' ll относиться, чтобы myMap после нанес на карту вне объема.
добавлено автор Chowlett, источник
@billz: You' ll получают точно то же самое перемещение проблемы unique_ptr в карту, как вы <закодировали> бы вектор ; весь you' полученный ve является дополнительным слоем осложнения.
добавлено автор Mike Seymour, источник
@MikeSeymour, однако, он был бы уверен элемент, никогда не будет копироваться, но перемещаться, потому что unique_ptr не позволяет копировать. Вектор только для движения был бы большим избежать случайных копий в этом случае.
добавлено автор Arne Mertz, источник
Просто используйте указатель в качестве стоимости карты, возможно, легче?
добавлено автор billz, источник
карта <последовательность, unique_ptr <вектор <последовательность>>> myMap , вы don' t нужно к alloc-dealloc вручную
добавлено автор billz, источник

1 ответы

Вы ищете станд.:: карта:: установить местоположение:

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

это называет appropiate станд.:: пара оперативный конструктор:

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

Так как первый аргумент - l-стоимость, ключ копируется, но (нанесенное на карту) второе является rvalue и таким образом построено из движения.

14
добавлено
Точно, что я хотел, Спасибо!
добавлено автор Chowlett, источник
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest