2011-04-11 4 views
2

unordered_map 클래스 템플릿을 사용하고 있는데 클래스에 대한 사용자 지정 해시를 작성하고 싶습니다. 이 문서에는 내장 유형에 기본 해싱 함수가 제공된다는 내용이 나와 있습니다. 따라서 선언 할 경우 :tr1/unordered_map에 대한 내장 유형 해시 함수 액세스

std::tr1::unordered_map<std::string, int> foo; 

자동으로 해시가 정의됩니다.

맞춤 해시 기능을 원한다면 Functor를 제공하는 좋은 예가 있습니다.

그러나 unordered_map에 삽입/삭제의 키로 사용하려는 std::string 회원이있는 복잡한 클래스가 있다면 어떻게해야합니까? 내 허쉬를 다시 쓰고 싶지 않아. 이미 std::string 유형으로 작성된 것을 활용하고 싶습니다.

답변

1

std::hash<T>은 기본 해시 기능을 제공하며 size_t을 반환합니다.

그래서 클래스의 여러 멤버에서 해시를 결합 할 수 있습니다. (std::hash<T>()(a) + prime * (std::hash<T>()(b) + prime * std::hash<T>()(c)))으로 계산합니다.

+0

좋아, 그럼 할 수 있어야합니다 : std :: hash (mystring)? –

+0

펑터를 인스턴스화해야합니다. 'std :: hash () (mystring)'이 작동해야합니다. –

+0

좋아, 나는 이것을 시도하고 '해시'가 '표준'의 구성원이 아니라는 메시지를 받았습니다. 이것은 MacOS에서 g ++ 4.2.1을 사용하고 있습니다. 원한다면 샘플 소스를 제공 할 수 있습니다. –