인프런 커뮤니티 질문&답변

yongyong96님의 프로필 이미지
yongyong96

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

vector 순회 vs map 순회

작성

·

707

0

안녕하세요. 루키스님 

STL 강의를 보다가 순회하는 속도에 대해서 궁금한 점이 있어서 질문을 남깁니다.

 

1만개의 데이터가 있을 때 vector로 순회하는 것보다 map으로 순회하는 것이 느리다고 하셨는데 그 이유가 무엇인가요?

vector 같은 경우 iterator를 직접 사용하지 않고 바로 인덱스로 순회할 수 있고 map은 iterator를 한칸씩 증가하면서

순회해야하기 때문인 것인가요?

 

혹은 vector는 메모리가 연속되어 있기 때문에 템퍼럴 로컬리티와 스페이셜 로컬리티 특성으로 인해 캐시히트가 잘 일어나게 되고 map은 메모리가 연속되어 있지 않기 때문에 반대로 캐시 미쓰가 많이 일어나서 그런 것인가요??

 

list또한 궁금합니다. 나머지 2개의 컨테이너와 비교했을 때 순회하는 속도가 어떤지도 궁금합니다.

vector list map을 for문으로 순회하는 것에 대해서 무엇이 빠르고 느린지 이유를 알고 싶습니다!

 

답변 1

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

이 부분은 자료구조&알고리즘에 대한 이해도가 필요하고
여기서 모든 원리를 설명드릴 수가 없습니다.

각기 다른 container에 대해 동일한 iterator 형식이라고
내부적으로 iterator가 동일하게 동작하는 것은 아닙니다.
vector는 동적 배열이니 가장 빠르고 (+ 캐시 영향도 물론)
list는 연결 리스트 방식이니 조금 더 느리고,
map은 red-black-tree 방식이니 전체 순회는 더더 느린 것이죠.

순회 테스트는 직접 데이터 100만개를 넣어서
실행 시간 테스트를 해보시기 바랍니다.

yongyong96님의 프로필 이미지
yongyong96

작성한 질문수

질문하기