inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part3: 자료구조와 알고리즘

map자료구조에 대해 질문있습니다..

해결된 질문

367

정승우

작성한 질문수 13

0

저번에 Bfs를 길찾기에 적용하는 강의를 듣고 코드를 따라쳤는데

안되더라구요. 길찾기가 너무 엉뚱하게 되었습니다.

그래서 몇시간동안 골머리를 썩다가

빨간 동그라미를 쳐놓은 부분의 조건을 y == other.y로 해놨었더라고요;;

일단 operator<를 선언해줘야 하는것도 처음엔 이해가 되지 않았는데

map자료형이 자료를 저장할때마다 정렬하기 때문인가 싶어서 넘어갔습니다.

 

근데 제가 오타를 찾기위해서 디버깅을 하는도중에 map에 값의 삽입이 이상하게 동작하더라고요..

저 parent가 nextPos라는 key값을 가지고 있지 않은데도 불구하고 값을 저장하지 않더라고요..

 

ex) parent의 사이즈는 1이고 parent[Pos{1,1}] == Pos{1,1} 였습니다.

여기서 parent[Pos{1,2}] = Pos{1,1}; 를 했음에도 불구하고 parent는 바뀐거 없이 그대로였습니다..

또 이해할수가없는게

parent[Pos{1,3}] = Pos{1,2}; 를 실행하면 parent에 값이 삽입되는게 아니라

parent[Pos{1,1}] 의 value가  Pos{1,2}가 되어버리더군요.. ㅠㅠ 사이즈는 그대로 1이었습니다.

 

구글에 map을 검색했는데 어떤방식으로 동작하는지 도통 이해가 되지않습니다.. 이에 질문드립니다..

map operator 기술면접

답변 1

1

Rookiss

일단 operator<를 선언해줘야 하는것도 처음엔 이해가 되지 않았는데
map자료형이 자료를 저장할때마다 정렬하기 때문인가 싶어서 넘어갔습니다.

네 맞습니다. 
map은 Red-Black Tree 방식이고 데이터를 넣어주거나 삭제할 때
트리가 다시 균형을 맞추기 위해 이리 저리 데이터 위치를 변경시켜야 하고
그것을 < 비교를 이용해 합니다.

따라서 맵에 넣는 데이터는 operator<를 지원해야 합니다.

저 parent가 nextPos라는 key값을 가지고 있지 않은데도 불구하고 값을 저장하지 않더라고요..

질문이 이해가 안 갑니다.
혹시 key값이 없는데 데이터가 저장된게 이상한건가요?

C++ map에서 map[키] = 값;을 하면
해당 키를 들고 있건 말건 상관없이 데이터를 덮어 씁니다.

여기서 parent[Pos{1,2}] = Pos{1,1}; 를 했음에도 불구하고 parent는 바뀐거 없이 그대로였습니다..

이건 아까 operator<를 잘못 만들어줘서 그런 것 같습니다.
저렇게 작동하는건 정상적인 상황이 아니고 struct Pos 정의에 문제가 있을 확률이 높습니다.
다시 확인해보시기 바랍니다.

0

정승우

아 2일간 여행을다녀오느라 답변을 지금 확인했네요ㅠㅠ

map[없던키] = 값;

형식이었는데 맵에 키/값이 저장이 안되는 상황입니다.

0

Rookiss

이전에 operator< 에서 ==으로 해서 오작동 한 것으로 판단되는데
다시 확인해보시기 바랍니다.

헤더파일에 관한 질문

0

437

1

이진 탐색 트리 삭제 질문

0

700

1

해당 문제 유형을 수학적으로 표현 가능할까요?

0

505

1

vs2022 미로 줄간격

0

1589

2

pos 구조체 초기화 문제

0

498

0

맵이 이상하게 나오는데 무슨 문제인가요?

0

513

1

자동완성 기능 질문

1

521

2

push_back emplace_back 질문있습니다.

0

397

1

Container, Predicate 질문입니다.

0

395

1

_size - 2 질문

0

417

1

Disjoint Set 질문있습니다

0

429

1

우선순위 큐 구현 연습 intellisense 질문

0

401

1

int32 관련 질문

0

278

1

c++에서 처음 보는 문법

0

385

1

학습에 크게 지장이 있는건 아니지만 단순 궁금해서 질문드립니다

0

324

1

힙 정렬과 병합 정렬

0

424

1

resize 질문

0

261

1

처음 보는 for문 문법

0

387

1

환경 설정.. 궁금점

0

388

1

이 비교 연산자를 넣어주는 이유가 있나요?

0

287

1

소멸자 관련 질문

0

249

1

&의 차이

0

290

1

프레임 관리 질문입니다.

0

332

1

연산자 오버로딩 관련 질문입니다.

1

203

1