2012-01-19 3 views
0

참고 : 때때로 "사용자는 구현 세부 사항에 대해 걱정할 필요가 없습니다"라고 대답하는 경우가 있는데, 마치 그것을 구현하고 싶은 것처럼 배우고 싶다. SGI 따르면고유 연관 해시 맵 컨테이너 대 연관 해시 맵 컨테이너의 특성은 무엇입니까

: 고유 연관 컨테이너는 동일한 키가 없음 개의 요소 :

유니크 연관 컨테이너는 컨테이너 내의 각 키는 고유 한 속성과 연관 컨테이너이다.

그 정도는 알고 있습니다. 더 이상 설명하지 않은 것은 데이터가 키가 고유 한 경우와 그렇지 않은 경우에 저장되는 방식입니다 (이것이 설명되지 않은 이유는 구현에 따라 다름). 따라서 키가 고유 할 때 모든 버킷 크기가 1 요소입니까? 나는 충돌 때문에 생각하고 있지 않다. 그렇다면 버킷 번호가 hasher에 의해 결정되고, 키가 고유하다면 그 요소는 버킷 자체에 어떻게 저장되어 있는가?

키가 고유하지 않은 경우는 어떻게됩니까? 요소는 어떻게 저장되고 버킷으로 /에서 반환됩니까?

은 나뿐만 아니라 그들이 관련된 경우 다른 지점에 정교 감사하겠습니다 방법 (일반적으로)를 고유 연관 컨테이너 그들 사이의 연관 컨테이너 저장 그들의 요소와의 차이 (존재하는 경우).

답변

0

은 고유 연관 컨테이너에서 고유 한입니다. 연결된 페이지에서 설명했듯이, 키 k를 가진 요소 e를 삽입하면 같은 키 k로 insert()를 호출해도 새로운 요소가 삽입되지 않습니다. 또한 연결된 페이지에서 지정한 키가있는 UAC의 요소 수를 반환하는 count() 메서드는 항상 0 또는 1을 반환합니다.

"버킷"에 대한 질문이 명확하지 않습니다. 컨테이너가 백엔드에서 데이터를 버켓킹하는 방법 (예 : 해시 맵이 연결 또는 다른 메커니즘을 통해 충돌을 처리하는지 여부)은 사용자로서 영향을 미치지 않습니다.

+0

저는 구현 자로서 질문하고 있습니다. 나는 구현 세부 사항을 기각하기보다는 이것에 대해 배우고 싶다. – Samaursa

+1

고유 한 연관 컨테이너 사양 자체는 버킷 스키마를 지정하지 않으므로 위에 나열된 사양의 세부 사항을 준수하는 한 충돌을 처리 할 수 ​​있습니다 (키가 실제로 동일한 경우 처리). –

+1

@Samaursa : 각 버킷에는 일반적으로 서로 다른 몇 개의 키가 들어 있다고 상상합니다. –