std::map을 반복문으로 돌려면?

조회수 2925회

std::map< std::string, std::map<std::string, std::string> > 형에

m["name1"]["value1"] = "data1";
m["name1"]["value2"] = "data2";
m["name2"]["value1"] = "data1";
m["name2"]["value2"] = "data2";
m["name3"]["value1"] = "data1";
m["name3"]["value2"] = "data2";

가 있고,

name1~name3까지 for를 돌려면 어떻게 해야 되나요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    iterator에서

    1. 외부의 map의 처음부터 끝까지 도는 for문 하나,
    2. map안의 map을 처음부터 끝까지 도는 for문 하나,

    이렇게 for문을 2개 써야 합니다.

    int main(){
        std::map< std::string, std::map<std::string, std::string> > m;
        m["name1"]["value1"] = "data1";
        m["name1"]["value2"] = "data2";
        m["name2"]["value1"] = "data1";
        m["name2"]["value2"] = "data2";
        m["name3"]["value1"] = "data1";
        m["name3"]["value2"] = "data2";
    
    
        typedef std::map<std::string, std::map<std::string, std::string>>::iterator outmap;
        //첫 번째 map을 이터레이션
        for(outmap iterator1 = m.begin(); iterator1 != m.end(); iterator1++) {
            cout << iterator1->first << endl;
    
            typedef std::map<std::string, std::string>::iterator inmap;
            //2번째 map을 이터레이션
            for(inmap iterator2 = (iterator1->second).begin(); iterator2!=(iterator1->second).end(); iterator2++ ){
                cout << iterator2->first << " " << iterator2->second << endl;
            }
        }
    }
    

    결과 :

    name1
    value1 data1
    value2 data2
    name2
    value1 data1
    value2 data2
    name3
    value1 data1
    value2 data2
    

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.