검색결과 리스트
글
std::map< int, int > Map1;
이런녀석이 있다고 할때 Map1[1], Map1[2] 처럼 접근이 가능하다. 물론 리턴값은 first에 맞는 second
그런데 std::map< int, int > *pMap2;
이렇게 선언되어있는 녀석이 있다면 pMap2[1], pMap2[2] 의 접근이 불가능하다.
이유인 즉슨!!
일반 map 에서 정의되어 있는 [] 오퍼레이터가 제대로 작동하지 않아서이다.
포인터 map에서의 []는 int *pI = new int[10]; 에서의 pI[1] 와 같은 의미.
결국 map 이라는 녀석이 할당된 메모리 주소를 쭉 찾아가다보니 당연히 first 값을 넣어도 second가 나오지 않는다.
( 확실한건 아니고 나의 가설일뿐 ㅎㅎ )
그렇다면 포인터로 선언한 map은 쓸수 없는가?
당연히 사용이 가능하다. 세가지 방법중 맘에 드는걸로 쓰는걸 추천~
1. 레퍼런스를 만들어 참조한다.
std::map< int, int > &refMap = *pMap2;
- 장점은 일반 map 사용하듯이 쓰면 된다.
- 단점은 주소 복사연산이기 때문에 변수 생성시에만 가능하다.
std::map< int, int > &refMap; << 선언 에러
std::map< int, int > refMap;
&refMap = *pMap2; << 말도 안되는 연산. 당연히 에러
2. 주소를 열심히 찾아가는 방법을 쓴다.
int iSecond = (*pMap2)[0];
- 장점은 레퍼런스가 아니니 때문에 어디서든 map 포인터에서 second의 값을 불러올 수 있다.
- 단점은 아직 못 찾았는데, 개인적으로 미관상 소스가 이쁘지 않다! ㅋㅋㅋ
3. 이터레이터를 사용한다면 아무 문제없다.
포인터든 아니든 이터레이터는 진리.
post script.
map은 [] 오퍼레이터 내부에서 find 와 insert를 돌린다. find로 있으면 second리턴 없으면 insert
( 이걸 모른다면 map 공부를 다시 하시길.. ㅋ )
위에 쓴 예시는 내부에 값이 있다는 전제하에 쓴 글임니당.
이런녀석이 있다고 할때 Map1[1], Map1[2] 처럼 접근이 가능하다. 물론 리턴값은 first에 맞는 second
그런데 std::map< int, int > *pMap2;
이렇게 선언되어있는 녀석이 있다면 pMap2[1], pMap2[2] 의 접근이 불가능하다.
이유인 즉슨!!
일반 map 에서 정의되어 있는 [] 오퍼레이터가 제대로 작동하지 않아서이다.
포인터 map에서의 []는 int *pI = new int[10]; 에서의 pI[1] 와 같은 의미.
결국 map 이라는 녀석이 할당된 메모리 주소를 쭉 찾아가다보니 당연히 first 값을 넣어도 second가 나오지 않는다.
( 확실한건 아니고 나의 가설일뿐 ㅎㅎ )
그렇다면 포인터로 선언한 map은 쓸수 없는가?
당연히 사용이 가능하다. 세가지 방법중 맘에 드는걸로 쓰는걸 추천~
1. 레퍼런스를 만들어 참조한다.
std::map< int, int > &refMap = *pMap2;
- 장점은 일반 map 사용하듯이 쓰면 된다.
- 단점은 주소 복사연산이기 때문에 변수 생성시에만 가능하다.
std::map< int, int > &refMap; << 선언 에러
std::map< int, int > refMap;
&refMap = *pMap2; << 말도 안되는 연산. 당연히 에러
2. 주소를 열심히 찾아가는 방법을 쓴다.
int iSecond = (*pMap2)[0];
- 장점은 레퍼런스가 아니니 때문에 어디서든 map 포인터에서 second의 값을 불러올 수 있다.
- 단점은 아직 못 찾았는데, 개인적으로 미관상 소스가 이쁘지 않다! ㅋㅋㅋ
3. 이터레이터를 사용한다면 아무 문제없다.
포인터든 아니든 이터레이터는 진리.
map은 [] 오퍼레이터 내부에서 find 와 insert를 돌린다. find로 있으면 second리턴 없으면 insert
( 이걸 모른다면 map 공부를 다시 하시길.. ㅋ )
vector나 list에서도 같은 문제가 발생하겠죵? 테스트를 안해봐서 이건 모릅니다! ㅋ
'Programming > 이런저런것들' 카테고리의 다른 글
PerformanceCounter 와 timeGetTime 과 Assembly count 비교 (0) | 2009.12.03 |
---|---|
path 잡아줄때 은(는) 예상되지 않았습니다. 에러날때. (0) | 2009.12.03 |
가변인자를 사용한 매크로 사용법 (0) | 2009.10.12 |
Parameter 와 argument의 차이점 (0) | 2009.08.20 |
재미없는 if문 (0) | 2009.08.05 |
RECENT COMMENT