지도

2012-02-01 5 views
1

나는 다음과 같은지도

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); 

내가 오류 "로 컴파일 할 때 오류가 발생하지 않습니다하려고 노력하고 있어요 : 시맨틱 문제를 'CONST VALUE_TYPE에에서 아무 가능한 변환'표준을 : 벡터>를 ' '(일명'const std :: vector> ') "

모든 도움을 주시면 감사하겠습니다.

답변

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 객체를 기대할 때 기본적으로 Vectors2d를 Vectors2d 객체로 push_back하려고합니다. 그것은 당신의 종류에 따라이 작업을해야합니다 :

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;