2d矢量地图

时间:2012-02-01 15:48:16

标签: c++ map vector

我正在尝试执行以下操作

std::map <int, std::vector<std::vector<double> > > mapof2Dvectors;

std::vector<std::vector<double> > temp;
for(int u=0; u<size1; u++){
     temp.push_back( std::vector<double> ());
     temp[u].push_back(somedoublehere);
 }
 mapof2Dvectors[key].push_back(temp);

当我尝试编译时出现错误:错误:语义问题:'std :: vector&gt;'没有可行的转换'const value_type'(又名'const std :: vector&gt;')“

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

我建议使用一些typedef吗?错误实际上非常简单。

typedef std::vector<double> Vectors1d;
typedef std::vector<VectorOfDoubles> Vectors2d;
typedef std::map<int, Vectors2d> MapOf2dVectors;

现在你正试图这样做:

MapOf2dVectors mapof2Dvectors;
Vector2d temp;
mapOf2dVectors[key].push_back(temp);

这有助于发现问题吗?当Vectors2d :: push_back期望一个Vectors1d对象时,你基本上试图将vectors_d推送到Vectors2d对象。它应该是根据你的类型:

mapOf2dVectors[key] = temp;

或更快:

mapOf2dVectors[key].swap(temp);

您的错误的简单类比是这样的:

vector<int> v1;
vector<int> v2;
v1.push_back(v2); // error, push_back accepts only a single integer here

所以我不确定你追求的是什么,但它可能会是这样的:

v1.insert(v1.end(), v2.begin(), v2.end());

或者这个:

v1 = v2;