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

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
    

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

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.