2010-02-11 8 views
1

set과 map이 모두 트리로 구현되어 있습니다. 설정은 바이너리 검색 트리이며, 맵은 red-black tree와 같은 자체 균형 이진 검색 트리입니다. 구현에 대한 차이점에 대해 혼란스러워합니다. 내가 할 수있는 차이점은 다음과 같습니다.C에서지도 구현 구현

1) 집합의 요소에는 하나의 값 (키) 만 있고지도의 요소에는 두 개의 값이 있습니다. 2) set은 요소를 저장하고 가져 오는 데 사용됩니다. map은 키를 통해 요소를 저장하고 가져 오는 데 사용됩니다.

그 외 무엇이 중요합니까?

감사합니다.

답변

4

지도와 세트는 거의 동일한 동작을하며 구현시 동일한 기본 기술을 사용하는 것이 일반적입니다.

유일한 차이점은 map이 전체 value_type을 비교하지 않고 단지 핵심 부분 만 비교한다는 것입니다.

1

보통 당신은 필요한 바로 알 수 있습니다.지도에 대한 "값"인수에 대한 부울이있는 경우 아마 세트를 원할 것입니다.

세트는 이산 수학 개념으로, 제 경험상 프로그래밍에서 계속 반복적으로 나타납니다. stl set 클래스는 가장 일반적인 작업이 삽입/제거/찾기 인 세트를 추적하는 비교적 효율적인 방법입니다.

지도는 객체가 전체 속성 집합에 비해 작은 고유 한 ID를 갖는 경우에 사용됩니다. 예를 들어 웹 페이지는 URL과 내용의 바이트 스트림으로 정의 할 수 있습니다. 바이트 스트림을 한 세트에 넣을 수는 있지만 바이너리 검색 프로세스는 매우 느리고 (내용이 URL보다 훨씬 크기 때문에) 컨텐츠가 변경된 경우 웹 페이지를 조회 할 수 없습니다. URL은 웹 페이지의 ID이므로 맵의 키입니다.

+2

true/false/not-present가 모두 별개의 주입니다. :) 맵은 값의 일부가 변경 될 때 적용됩니다 (std :: map :: mapped_type, 구체적으로). "효율적인 세트"가 아닌 값의 ID를 변경하지 않아도됩니다. –

0

지도는 보통 < std :: pair <>>으로 구현됩니다.

이 집합은 정렬 된 목록에서 항목을 빠르게 검색하려는 경우 기본적으로 해당 키가 지정된 값을 검색 할 때 맵이 사용되는 동안 사용됩니다.

두 경우 모두 키 (맵의 경우) 또는 값 (세트의 경우)이 고유해야합니다. 동일한 여러 값을 저장하려면 다중 맵 또는 다중 세트를 사용합니다.