2012-12-19 29 views
0

我有一个名为Info的类。将unique_ptr与矢量和地图一起使用

我试着创建一个unique_ptr向量来存放这个类的列表。

该映射包含的键为字符串,unique_ptr为值。

但是当我尝试检索从地图的价值,并试图把它变成一个载体,形成列表,VS2010编译器提供了一个错误: 错误C2664:“无效的std ::矢量< _Ty> ::的push_back( _Ty & &):性病::矢量< _Ty>”不能转换参数1 '' 到 '的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 
} 

如何让 任何帮助,对此会非常感谢。

回答

0

由于错误信息提示,你想逼退整个S值容器(这是一个vector<unique_ptr<Info>>而不是unique_ptr<Info>的。正如你刚才注意到,这是不是太顺利。

你有。首先,你可以遍历的sValuepush_back每个元素内容的几个选项其次,你可以使用std ::副本中添加元素在一个声明:

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

第三个选项是使用std :: vector的insert函数一次性添加整个容器:

sInfo.insert(sInfo.end(), sValue.begin(), sValue.end()); 
+0

谢谢Timo,我确实选择了第一个选项,它确实有效。但现在我遇到了QMap.error C2248问题:'std :: unique_ptr <_Ty> :: operator =':无法访问在类'std :: unique_ptr中声明的私有成员'<_Ty>' – Dilshad