답변:
Hash
프로그래머가 구현 인터페이스를 혼동 (한 매우 가난이라는 데이터 구조 와 전체 이름 즉, 쓰기에 너무 게으른 HashTable
대신, 약자에 의존는 Hash
).
Dictionary
인터페이스 의 "올바른"이름 (= ADT ), 즉 (일반적으로 고유 한) 키를 반드시 고유하지는 않은 값에 매핑하는 연관 컨테이너입니다.
해시 테이블은 (런타임 측면에서) 상당히 우수한 액세스 특성을 제공하는 사전의 한 가지 가능한 구현이므로 종종 기본 구현입니다.
이러한 구현에는 두 가지 중요한 특성이 있습니다.
키를 해시 가능하게하려면 나중에 배열에서 인덱스로 사용되는 키에서 숫자 값을 계산할 수 있습니다.
키에 순서 를 부여하는 사전 데이터 구조의 대체 구현이 있습니다. 이를 종종 정렬 된 사전 이라고합니다 (다른 효율적인 구현이 존재하지만 일반적으로 검색 트리로 구현 됨).
요약하면, 사전 은 키를 값에 매핑하는 ADT입니다. 이 ADT에는 여러 가지 가능한 구현이 있으며 그 중 해시 테이블 은 하나입니다. Hash
은 잘못된 이름이지만 문맥 상 해시 테이블 측면에서 구현되는 사전과 동일합니다.
Hash
때문에 Ruby 1.9 Hash
는 삽입 순서를 유지하기 때문에 실제로 해시 테이블을 사용 하여 클래스 를 구현할 수 없습니다. 따라서 Ruby 1.9에서는 이름 Hash
이 더 이상 구현을 반영하지 않습니다.
"사전"은 개념의 이름입니다. 해시 테이블은 가능한 구현입니다.
사전 의 AN 직접 내부 값을 참조하는 키를 사용하여 연관 배열 .
즉 (KEY => VALUE)
해시 더 자주로 설명 해시 테이블 사용 해쉬 함수 값이 될 것이다 메모리 위치 (또는 더 쉽게 배열)를 계산. 해시는 KEY를 입력으로 사용하고 값을 출력으로 제공합니다. 그런 다음 해당 값을 메모리 또는 배열 인덱스에 연결하십시오.
즉 KEY => HASH FUNCTION => VALUE
하나는 직접적이지만 다른 하나는 그렇지 않은 것 같습니다. 해시 함수도 완벽하지 않을 수 있으며 때로는 잘못된 값을 참조하는 인덱스를 제공 할 수 있습니다. 그러나 그것은 고칠 수 있습니다.
가장 좋은 곳 : Wikipedia ( 연관 배열 및 해시 테이블 )
unordered_map
자신이 아닌 자신이하는 일을 보여 주도록 부름 받았습니다.