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


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은 어떻게 접근해야 되나요?

  • 2016년 01월 24일에 작성됨

조회수 351


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;
    }
}
  • 2016년 01월 24일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close