2010-02-01 3 views
43

C++에서 해시 함수를 사용하는 방법을 모르지만 hash_map을 사용할 수 있다는 것을 알고 있습니다. g ++는 단순히 #include <hash_map>을 포함하여이를 지원합니까? hash_map을 사용하는 간단한 예는 무엇입니까?C++에서 hash_map 예제를보고 싶습니다.

+8

@BlueRaja : 예, 실제로 hash_map은 C++의 일부라고 믿는 사람들처럼 멋진 혼란을 일으 킵니다. 나는 다른 프로그래밍 관련 질문과 마찬가지로 이것을 집에두고 있다고 생각합니다. 그렇지 않습니까? 사람들이 Google을 사용하도록 말하면 시간과 시간을 낭비하게됩니다. 왜냐하면 그들은 나중에 질문을하기 위해 이곳에 올 때 오해와 나쁜 습관을 모두 털어 내야하기 때문입니다. 왜냐하면 그들은 정확하고 신뢰할 수없는 수천 개의 답변을 훑어보아야하기 때문입니다. – jalf

+1

@ jalf : SO에 대한 응답이 어떻게 든 정확하고 신뢰할 수 있다고 보장되는 것처럼. –

+11

그들은 다른 프로그래머가보고 득표 한 것으로 보장되어 초보자가 맹목적으로 Google에서 검색하는 것보다 훨씬 신뢰할 수 있습니다. – jalf

답변

50

현재의 C++ 표준은 해시지도를 가지고 있지 않지만, 앞으로 C++ 0X 표준은 않습니다, 이들은 이미 "순서가없는지도"의 형태 ++ g에 의해 지원됩니다

#include <unordered_map> 
#include <iostream> 
#include <string> 
using namespace std; 

int main() { 
    unordered_map <string, int> m; 
    m["foo"] = 42; 
    cout << m["foo"] << endl; 
} 

위해 이 컴파일을 얻기 위해, 당신은 당신이 사용되는 g ++ 말할 필요가 C++ 0X :

g++ -std=c++0x main.cpp 

이지도는 일을하는 대신 자신의 유형에 대한 사용자 지정 operator<()를 제공하는 것을 제외하고 표준 : :지도,처럼 거의 , 사용자 정의 해시 함수를 제공해야합니다 - suitab le 함수는 정수 및 문자열과 같은 유형에 대해 제공됩니다.

+0

+1 : 당신은 TR1을 언급하기 위해 그 대답을 편집해야합니다 ... –

+1

@ 코넬 아니,하지 않아야합니다. tr1 네임 스페이스는 일부 컴파일러가 제공하는 확장 일뿐입니다. 나는 그것을 내 자신의 코드에서 사용하지 않는다. –

+0

@Neil, sooo, GCC 3.4, MSVC 및 기타 non-C++ 0x 컴파일러를 사용하는 사람은 TR1을 사용해서는 안되지만 C++ 0x 라이브러리 확장이 즉시 지원 될 때까지 기다려야합니까? –

9

#include <tr1/unordered_map> 다음 표준 C++ unique hash container을 제공합니다. 사용법 :

std::tr1::unordered_map<std::string,int> my_map; 
my_map["answer"] = 42; 
printf("The answer to life and everything is: %d\n", my_map["answer"]); 
+3

C++ 스타일 컨테이너로 C 스타일 출력? 아야! – Bill

+22

현실 세계에 오신 것을 환영합니다. :) –

1

TR1에 입학 이름 (그리고 다음 표준에 대한 초안) std::unordered_map, 그래서 당신이 사용할 수있는 경우에, 당신이 사용하고자하는 사람이 아마. 그 외에는

은 그것을 사용하는 많은 당신이 std::map의 항목을 통과하면, 그들은 operator<에 의해 지정된 순서대로 나올/있음, 단, std::map를 사용하여 비슷하지만 unordered_map도를 들면, 순서는 일반적으로 의미가 없다.

관련 문제