답변:
당신은 std::vector<X>
상점이 많은 X
물건 들을 저장 한다는 것을 알고 있습니까? 그러나을 가지고 있다면 std::map<X, Y>
실제로 저장하는 것은 전체입니다 std::pair<const X, Y>
. 이것이 바로지도가되는 것입니다. 키와 관련 값이 쌍을 이룹니다.
를 반복 std::map
하면이 모든 것을 반복 std::pair
합니다. 이러한 반복자 중 하나를 역 참조 std::pair
하면 키와 관련 값 이 포함 된 을 얻게 됩니다.
std::map<std::string, int> m = /* fill it */;
auto it = m.begin();
여기서을 수행 하면지도의 첫 번째 요소에 *it
대한를 얻게 std::pair
됩니다.
이제이 유형을 std::pair
사용하면 두 멤버를 통해 요소에 액세스 할 수 있습니다 : first
및 second
. 당신이 경우 그래서 std::pair<X, Y>
라고 p
, p.first
인 X
객체와 p.second
A는 Y
객체입니다.
그래서 지금 당신이 역 참조 알고 std::map
반복자 것은 당신에게를 제공합니다 std::pair
, 당신은 다음과 요소에 액세스 할 수 있습니다 first
와 second
. 예를 들어 (*it).first
키 (*it).second
를 제공하고 가치를 제공합니다. 이것들은 it->first
and와 동일합니다 it->second
.
operator[]
특정 형식을 반환해야하지만, first
및 second
다른 유형을 가질 수 있습니다. 반면, 색인으로 요소에 액세스하기위한 std::tuple
특수 도우미 기능 std::get
이 있습니다.
의 요소의 형태 std::map
열쇠 (해당지도 반복자 역 참조하여 얻어진 식의 유형) K
및 값 V
이고 std::pair<const K, V>
키가 - const
맵 값의 내부 정렬 간섭을 방지 할 수있다.
std::pair<>
두 개의 멤버가 first
있고 second
( 여기 참조 ) 매우 직관적 인 의미가 있습니다. 따라서 i
특정 맵에 반복자 가 주어지면 다음 과 같은 표현식이 나타납니다.
i->first
다음과 같습니다.
(*i).first
반복자가 가리키는 객체 의 첫 번째 ( const
) 요소를 나타냅니다. pair
즉 , 맵 의 키 를 나타냅니다 . 대신에 표현은 다음과 같습니다.
i->second
다음과 같습니다.
(*i).second
즉 ,지도 의 해당 값 을 나타내는 두 번째 요소를 나타냅니다 .pair
std::map
는 키 와 값을 저장 합니다 . 값을map::iterator.second
나타냅니다 .