2011-05-06 7 views
50

빠른 질문 ... hash_map은 STL의 일부입니까?hash_map은 STL의 일부입니까?

+2

아니요. 'unordered_map'을 사용하십시오. 정말로 해시 맵이 필요합니까? 'std :: map'이 실제 요구 사항을 충족시키는 지 알 수 없습니다. –

+6

@Martin :'hash_map' ***은 *** STL의 일부입니다. –

+10

STL을 정의하십시오. C++ 표준 라이브러리를 의미합니까? 아니면 몇 년 전에 발표 된 원래 표준 템플릿 라이브러리를 의미합니까? 나중에 부분적으로 현재 C++ 표준으로 채택 되었습니까? STL을 비공식적으로 stdlib로 사용한다면 일반적으로 신경 쓰지 않지만,이 경우 중요합니다. 표준 C++에는'hash_map'이 없습니다. STL이 있습니다. (Future C++과 Boost에는 해시 맵인 unordered_map이 있습니다.) – GManNickG

답변

90

The STLhash_map이지만, C++ 표준 라이브러리 does not입니다.

a common misconception으로 인해 C++ 표준 라이브러리를 "STL"로 생각하거나 C++ 표준 라이브러리의 툴체인 구현 부분을 "STL 구현"으로 생각할 수 있습니다. 그렇지 않습니다.

또한 큰 수치입니다 매우 오해의 소지가 입니다 (컴파일러 고유의 확장으로 hash_map를 구현) 모두 MSVC++ 및 GCC, place it in the std namespace. * 한숨 *

C++ 11은 비슷하지 않은 std::unordered_map을 도입했습니다.

13

인용 위키 백과 (강조는 추가) :

STL 페이지에서 :

표준 템플릿 라이브러리 (STL)는 C++ 표준 라이브러리에 포함 된 소프트웨어 라이브러리 부분적으로입니다.

은 ... 다음 hash_map 페이지 C++ 프로그래밍 언어에서

, hash_map에서 표준 템플릿 라이브러리의 해시 연관 컨테이너의 이름입니다. GNU C++ 컴파일러와 Microsoft의 Visual C++와 같은 몇 가지 구현 자에 의해 에 의해 제공됩니다. 그것은 C++ 표준 라이브러리의 일부가 아니라는 C++ 기술 보고서 ​​1 은 곧 C + +0 표준에 포함될 매우 유사한 용기 unordered_map가 포함되어 있습니다. 그래서 짧은

,

  • 은 YES 그것은 STL의 일부입니다.
  • 표준 라이브러리에는이 아닙니다.
  • 그러나 널리 사용되는 여러 구현에서 지원됩니다.
+2

@razlebe : 예 또는 아니오라고 말할 수는 없습니까? – forsvarir

+3

@forsvarir : 물론 wikipedia를 인용해도 내 대답이 신뢰성있게됩니다. ;) – razlebe

+0

중요하게도, 이식성이 중간 정도이므로, 어쨌든 사용하기로 결정했다면 컴파일러 문서를 확인하여 어떤 헤더와 네임 스페이스가 있는지 알아보십시오. 아마도 #include '/'std : : hash_map x', 더 힘들지는 않지만 .... –

-2

아니요 ... Hash_map은 STL 표준의 일부가 아닙니다.

+5

STL 표준과 같은 것은 없습니다. –

+2

@AlexandreC .: ISO, ANSI 등의 STL 표준은 없지만 STL 문서 (예 : sgi.com)를 사실상의 표준으로 간주 할 이유는 없습니다. –

+0

@Alexandre C : ** STL **의 정의에 따라 몇 가지가 있습니다. –

7

STL이라는 용어에는 합의 된 의미가 없다는 것이 문제입니다. hash_map은 Standard C++의 일부입니까? 아니, 그렇지 않아. unordered_map은 새로운 C++ 표준의 일부가 될 것이며 해시를 사용하여 구현 된지도입니다.

+1

그리고 ** STL ** 정의에 쉽게 사용할 수있는 구현이 포함되어 있다면 hash_map이 포함될 수 있습니다. –

+4

합의 된 의미가 있습니다. 그것은 일부 사람들이 그것에 동의하지 않는 것입니다. –

+0

@Tomalak 어떤 사람들은 동의하지 않으면 동의하지 않습니다. –

4

, hash_mapSTL의 일부입니다. 단, 이 아닌 부분의 C++ 03의 표준 라이브러리입니다.

+0

정말요? C++ 0x FDIS에서'hash_map'을 찾을 수 없습니다. 당신의 주장을 뒷받침 할 증거가 있습니까? – fredoverflow

+1

오, 당신이 다른 STL을 의미, 잠깐. – fredoverflow

+4

@FredOverflow : 귀하의 오해에도 불구하고 _ 단 하나의 STL_ 만 있습니다. –

2

hash_map은 STL의 일부이지만 Standard C++ (C++ 11)의 일부는 아닙니다. 컴파일러 확장뿐만 아니라 부스트 http://www.cplusplus.com/reference/unordered_map/unordered_map/

현재, GNU C++ 및 MSVC++에서 구현 한 hash_map : 그리고 표준 C에서 "표준 : unordered_map도"++라는 이름의 hash_map의 비슷한 구현이있다. 한편, SGI는 hash_map에 대한 자체 구현을 가지고 있습니다. 자세한 내용은 http://www.sgi.com/tech/stl/hash_map.html을 참조하십시오.

관련 문제