2016-06-04 2 views
-1

나는 다음과 같은 코드를 가지고 :중첩지도 반복자

int main() 
{ 
    typedef std::map<int,int> monthMap; 
    typedef std::map<int,std::map<int, monthMap>> yearMap; 


    //std::ifstream inputFile("MetData-31-3.csv"); 
    //std::ifstream inputFile("MetData_Mar01-2015-Mar01-2016-ALL.csv"); 
    //if(!inputFile) return -1; 

    //readFile(inputFile, yearMap); 
    int year = 2011, month = 4; 
    yearMap ym; 
    monthMap mm; 
    ym[year][month]; 
    yearMap::iterator yearItr = ym.find(year); 

    if(yearItr != ym.end()) 
    { 
     //monthMap &mp = yearItr->second; 
     monthMap::iterator monthItr; 
     monthItr = (yearItr->second).find(month); 
     if(monthItr != yearItr->second.end()) 
     { 
      std::cout << "Found!"; 
     } 
    } 

} 

기본적으로 난 할 노력하고있어하는 설정은 내 프로젝트의 기본이다가, CSV 파일에서 읽은 날짜, 시간 등의 정보를 포함하는, 데이터 센터의 풍속 및 복사 수준.

다른 프로젝트에서는 모든 것을 벡터로 사용하고 있지만 데이터 구조를 전환하고 프로젝트 내에서 BST와 Map을 구현해야합니다.

내 디자인 전략은 이것이다 : 는 풍속, 시간 등 모든 요소를 ​​포함 객체 WindData의 벡터를 포함 일 의 BST를 포함 개월 의지도를 포함 년 의지도를 가지고, 방사선 등

우선, 이것을 설정하는 것이 가장 좋은 방법입니까? 나는이 단계에서 대안을 정말로 생각할 수 없다.

하지만 난 여기 실행 해요 내 주요 문제는 실제로 중첩 된지도를 통해 반복하는 방법이다, 나는이 코드이 모두 매우 부피가 큰 추한 느린

D:\Projects\testProj\main.cpp|31|error: no match for 'operator=' (operand types are 'std::map<int, int>::iterator {aka std::_Rb_tree_iterator<std::pair<const int, int> >}' and 'std::map<int, std::map<int, int> >::iterator {aka std::_Rb_tree_iterator<std::pair<const int, std::map<int, int> > >}')| 

에서 다음과 같은 오류를 받고 있어요 이 유형의 프로세스에 대해이 데이터 구조를 사용하려면 필자에게해야하지만 필자는이 두 가지 데이터를 저장하고 처리하는 다른 방법에 대한 제안은 아직 공개하지 않았습니다. 여전히 MAP 두 가지를 모두 사용하고 있습니다. & BST.

답변

0

변경 :

monthMap::iterator monthItr; 
monthItr = (yearItr->second).find(month); 

사람 :

int main(){ 
    typedef std::map<int,int> monthMap; 
    typedef std::map<int,std::map<int, monthMap>> yearMap; 

    int year = 2011, month = 4; 
    yearMap ym; 
    monthMap mm; 
    ym[year][month]; 
    auto yearItr = ym.find(year); 
    if(yearItr != ym.end()){ 
     auto monthItr = (yearItr->second).find(month); 
     if(monthItr != yearItr->second.end()) 
     { 
      std::cout << "Found!"; 
     } 
    } 
} 
+0

감사 : 그러나

std::map<int, monthMap>::iterator monthItr; monthItr = (yearItr->second).find(month); 

, AAA 당신의 시간과 노력을 절약 할 수! 이것은 효과가있다! 이러한 데이터 구조를 설정 한 방법에 대한 제안 사항이 있습니까? 이 작업에는 일간 월간지도의 BST와 매일 BST의 벡터가 포함됩니까? –

+0

디자인이 IMO로 손상되었습니다. 너무 많은 중첩 된지도가 최상의 옵션이 아닙니다. 더 나은 방법에 대해 생각해야합니다. –

+0

나는 약 2 주 동안이 작업을 수행하는 방법을 생각 해왔다.이 데이터를 저장하기 위해 BST와 Map을 모두 사용하는 논리적으로 생각해 볼 수있는 유일한 해결책이다. –