Использование unique_ptr с вектором и картой

У меня есть класс под названием Info.

Я попытался создать вектор unique_ptr для хранения списка этого класса.

Карта содержит ключ в виде строки и unique_ptr в качестве значения.

Но когда я пытаюсь получить значение из карты и пытаюсь поместить его в вектор для формирования списка, компилятор VS2010 выдает ошибку: error C2664: 'void std::vector‹_Ty>::push_back(_Ty &&)': невозможно преобразовать параметр 1 из 'std::vector‹_Ty>' в 'std::unique_ptr‹_Ty> &&'

vector<unique_ptr<Info>> sInfo;
QMap<QString,vector<unique_ptr<Info>>>::Iterator iterMap;
for(iterMap = map_sInfo.begin(); iterMap != map_sInfo.end(); ++iterMap)
{
    vector<unique_ptr<Info>>sValue = iterMap.value();
    sInfo.push_back((sValue)); //error C2664
}

Как мне сделать, чтобы любая помощь по этому поводу была бы очень признательна.


person Dilshad    schedule 19.12.2012    source источник


Ответы (1)


Как следует из сообщения об ошибке, вы пытаетесь вернуть обратно весь контейнер sValue (который представляет собой vector<unique_ptr<Info>> вместо unique_ptr<Info>. Как вы только что заметили, это не слишком хорошо.

У вас есть несколько вариантов. Во-первых, вы можете просмотреть содержимое sValue и push_back каждого элемента. Во-вторых, вы можете использовать std::copy для добавления элементов в один оператор:

std::copy(sValue.begin(), sValue.end(), std::back_inserter(sInfo);

Третий вариант — использовать функцию insert std::vector для добавления всего контейнера за один раз:

sInfo.insert(sInfo.end(), sValue.begin(), sValue.end());
person Timo Geusch    schedule 19.12.2012
comment
Спасибо, Тимо, я выбрал первый вариант, и он сработал. Но теперь у меня проблемы с QMap.error C2248: 'std::unique_ptr‹_Ty›::operator =': невозможно получить доступ к частному члену, объявленному в классе 'std::unique_ptr‹_Ty›' - person Dilshad; 20.12.2012