2010-07-22 2 views
1

find 또는 operator []을 사용하여 std::map 요소에 액세스 할 때 성능에 차이가 있는지 아시나요?std :: map의 요소에 빠르게 액세스

하나는 iterator을 반환하고 다른 하나는 const ref을 개체에 반환합니다.

STL의 모든 장면 중에서 어느 것이 더 빠를까요?

답변

5

존재하지 않는 키에 []를 사용하면 기본 요소가 삽입됩니다. 이 기본 요소는 맵 정의에 따라 다릅니다 (예 : int의 경우 0입니다).

찾기를 사용하면 "자동"삽입이 없으므로 존재하지 않는 키를 자주 검색하면 상당히 빠를 수 있습니다.

+0

나는 그 연산자 []를 추가 할 것이고, 기본적으로 find를 호출 할 것이다. 요소가 존재하지 않으면 요소가 추가해야하는 위치를 사용합니다. 그것은 "그냥"요소 건설 비용. – Scharron

+1

좋은 지적. 같은 것을하지 않는 두 가지 사이의 속도를 비교하는 것은 오도하는 경향이 있습니다. –

-3

은 O (n)이다. operator []은 O (1)입니다. 따라서 후자는 (일반적으로) 빠릅니다.

+0

지도 구현에 따라 다릅니다. std :: map에 대한 요구 사항은 O (log (n))이며 find (연산자 []는 더 많거나 적은 find를 사용합니다). – Scharron

+0

해시 맵과 맵을 혼동해야합니다. –