문제

나는 일반적으로 특정 유형의 값 (주요 값 - 문자열 또는 다른 객체)과 관련된 데이터를 저장해야 할 때마다 C ++ stdlib 맵을 사용합니다. STDLIB 맵 구현은 표준 어레이 또는 STDLIB 벡터보다 더 나은 성능 (O (log N))를 제공하는 트리를 기반으로합니다.

내 질문은 더 나은 성능을 제공하는 C ++ "표준"해시 가능 구현 (O (1))에 대해 알고 있습니까 (O (1))입니다. Java API의 Hashtable 클래스에서 사용할 수있는 것과 유사한 것.

도움이 되었습니까?

해결책

C ++ 11을 사용하는 경우 <unordered_map> 그리고 <unordered_set> 헤더. 이들은 수업을 제공합니다 std::unordered_map 그리고 std::unordered_set.

TR1과 함께 C ++ 03을 사용하는 경우 클래스에 액세스 할 수 있습니다. std::tr1::unordered_map 그리고 std::tr1::unordered_set, 동일한 헤더 사용 (GCC를 사용하지 않는 한 헤더는 <tr1/unordered_map> 그리고 <tr1/unordered_set> 대신에).

모든 경우에 해당하는 것이 있습니다 unordered_multimap 그리고 unordered_multiset 유형도.

다른 팁

아직 unordered_map 또는 unordered_set이 없다면 후원.
다음은 두 가지 문서입니다.

이있다 해시 맵 여기에서 많은 사람들이 언급 한 대상이지만 STL의 일부는 아닙니다. 그것은 SGI 확장자이므로 STL에서 무언가를 찾고 있다면 운이 좋지 않다고 생각합니다.

std :: tr1 :: unordered_map, in <unordered_map>

TR1이 없으면 부스트를 받고 boost :: unordered_map을 사용하십시오. <boost/unordered_map.hpp>

Visual Studio에는 수업이 있습니다 stdext::hash_map 헤더에서 <hash_map>, 및 GCC는 수업을 가지고 있습니다 __gnu_cxx::hash_map 같은 헤더에서.

보다 std :: hash_map SGI에서.

이것은에 포함됩니다 stlport 분포도.

Hash_map은 GNU에서도 지원됩니다 libstdc ++.

Dinkumware도 지원합니다 이것은 많은 구현에 HASH_MAP를 가질 것임을 의미합니다 (비주얼 C ++조차 Dinkumware와 함께 제공한다고 생각합니다).

YOR 컴파일러에 사용 가능한 TR1 확장 기능이있는 경우 사용하십시오. 그렇지 않다면 boost.org에는 std :: 네임 스페이스를 제외하고는 매우 유사한 버전이 있습니다. 이 경우 사용을 사용하여 STD :: 나중에 전환 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top