2017-02-16 1 views
0

어제 누군가가 주문한지도의 기본 구조가 이진 검색 트리라는 것을 나에게 이야기했습니다. O (1) 검색을 수행 할 수 없기 때문에 이것은 나에게 이해가되지 않습니다. 아무도 설명 할 수 있을까요?std :: map의 기본 구조는 무엇입니까?

또한 stdlib을 사용하지 않고 C++로 해시 테이블을 구현하는 경우 가장 좋은 방법은 무엇입니까?

+2

어디서 O (1) 검색을 했습니까? 먼저 [docs] (http://en.cppreference.com/w/cpp/container/map)를 읽으십시오. 둘째, 일반적으로 [red-black trees] (https://en.wikipedia.org/wiki)로 구현됩니다./Red % E2 % 80 % 93black_tree), 셋째로 다른 질문이 너무 광범위합니다 – EdChum

+0

질문 당 하나의 질문으로 제한하십시오. – nwp

답변

0
  1. 기본 데이터 구조는 구현에 따라 정의됩니다. 가장 일반적으로 자체 균형 조정 이진 검색 트리 인 Red-Black 트리로 구현됩니다. 요소를 가져 오는 데 드는 시간 복잡도는 O (logn)입니다 (this 참조)

  2. 나는 std::unordered_map의 구현을 시작으로 읽을 것입니다. 나는 이것이 학습 활동이라고 가정하고 작업 STL 구현을 읽고 이해하는 것이 좋은 운동이 될 것입니다. 운동이 아닌 경우 std::unordered_map

0

std :: map은 노드 삽입/삭제 및 검색의 복잡성 사이에서 적절한 균형을 유지하므로 Red-Black 트리를 사용합니다.

+0

현재 구현에는 해당되지만 표준에서는 필요하지 않습니다. (현재 요구 사항을 충족시킬 수있는 다른 데이터 구조를 알고있는 사람은 없지만 내일은 발견 될 수 있습니다.) –

1

std :: map 조회 시간이 O (1) O (log (n))가 아닙니다.

std :: unordered_map에는 O (1)의 조회 시간이 상각됩니다.

std :: unordered_map 및 std :: unordered_set은 해시 테이블입니다.

관련 문제