std::map을 auto로 접근하는 방법?

조회수 10368회
std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 };
for ( auto xyz : numbers )
{
     std::cout << xyz << std::endl;
}

C++0x에는 vector에서 for문을 이렇게 돌면 xyzint형이었는데

std::map< foo, bar > testing = { /*...blah...*/ };
for ( auto abc : testing )
{
    std::cout << abc << std::endl;         // foo? bar?
    std::cout << abc->first << std::endl;  // 아니면 이터레이터?
}

이렇게 map인 경우는 어떻게 되나요? vector 같은 건 인덱스로 접근하는 것 같이 for문을 돌아서 원소로 접근되고, list 같은 건 이터레이터로 접근해야 하는데 map이나 multimap은 어떻게 접근해야 되나요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    std::vector<X>라고 선언하는 것은 container에 X타입의 원소를 저장하겠다는 의미고, std::map<X, Y>라고 선언하는 것은 std::pair<const X, Y>를 저장하겠다는 의미입니다. std::pair<const X, Y>에서 X에만 const가 붙는 이유는 Xkey이고, Ykey에 대응하는 value이기 때문입니다. key는 바뀔 수 없지만, Y는 바뀔 수 있으니까요.

    이처럼 map에 저장된 원소는 std::map<K, V>::value_type 입니다. 따라서 for(auto..)와 같이 이터레이터를 쓸 때에는 std::pair에 접근하는 것입니다. std::pair<K, V>를 접근할 때는 pair의 원소인 first(K에 접근), second(V에 접근)을 써야 합니다.

    int main(){
        map<int, int> temp;
        temp[5] = 4;
        temp[1] = 2;
    
        for(auto &kv : temp){
            cout << kv.first << " " << kv.second << endl;
        }
    }
    

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

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)