code

C ++의 해시 테이블?

codestyles 2021. 1. 7. 08:00
반응형

C ++의 해시 테이블?


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

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


C ++ 11을 사용하는 경우 <unordered_map><unordered_set>헤더에 액세스 할 수 있습니다. 이들은 클래스 std::unordered_mapstd::unordered_set.

당신이 TR1과 C ++ 03을 사용하는 경우, 당신은 클래스에 액세스가 std::tr1::unordered_mapstd::tr1::unordered_set(헤더가있는 경우에 당신은 GCC를 사용하지 않는, 같은 헤더를 사용 <tr1/unordered_map>하고 <tr1/unordered_set>대신를).

모든 경우에 해당 unordered_multimapunordered_multiset유형도 있습니다.


아직 unorder_map 또는 unordered_set이 없으면 boost의 일부입니다 .
다음은 .


거기에있다 hash_map의 여기 많은 언급이 객체는,하지만 STL의 일부가 아닙니다. SGI 확장이므로 STL에서 무언가를 찾고 있다면 운이 좋지 않은 것 같습니다.


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

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


Visual Studio에는 stdext::hash_mapheader에 클래스 <hash_map>있고 gcc에는 __gnu_cxx::hash_map동일한 헤더에 클래스 가 있습니다.


SGI의 std :: hash_map참조하십시오 .

이것은 STLPort 배포에도 포함됩니다.


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

Dinkumware는 또한 이것을 지원하므로 많은 구현에 hash_map이있을 것입니다 (Visual C ++도 Dinkumware와 함께 제공한다고 생각합니다).


컴파일러에 사용할 수있는 TR1 확장이 있으면이를 사용하십시오. 그렇지 않은 경우 boost.org에는 std :: 네임 스페이스를 제외하고는 매우 유사한 버전이 있습니다. 이 경우 나중에 std ::로 전환 할 수 있도록 using-declaration을 입력합니다.


std :: hash_map

참조 URL : https://stackoverflow.com/questions/133569/hashtable-in-c

반응형