C++의 map과 unordered_map

전제조건: 표준::지도 , 표준::순서가 없는_맵
효율성 측면에서 보면 맵과 순서가 지정되지 않은 맵 사이에는 큰 차이가 있습니다.
어느 것을 사용할지 결정하려면 두 가지 모두의 내부 작동을 알아야 합니다.

차이점 :

 | map | unordered_map --------------------------------------------------------- Ordering | increasing order | no ordering | of keys(by default) | Implementation | Self balancing BST | Hash Table | like Red-Black Tree | search time | log(n) | O(1) ->평균 | | O(n) -> 최악의 경우 삽입 시간 | 로그(n) + 재조정 | 검색과 동일 삭제시간 | 로그(n) + 재조정 | 검색과 동일 

다음과 같은 경우에는 std::map을 사용하세요.

  • 주문된 데이터가 필요합니다.
  • 데이터를 정렬된 순서로 인쇄/액세스해야 합니다.
  • 요소의 선행/후속 요소가 필요합니다.
  • 더 많은 사례를 보려면 해시 테이블에 비해 BST의 장점을 참조하세요.

CPP




// CPP program to demonstrate use of std::map> #include> int> main()> {> > // Ordered map> > std::map <> int> ,> int> >주문;> > // Mapping values to keys> > order[5] = 10;> > order[3] = 500;> > order[20] = 100;> > order[1] = 1;> > // Iterating the map and> > // printing ordered values> > for> (> auto> i = order.begin(); i> > != order.end(); i++) {> > std::cout < < ' : ' ' '; } }>

산출

1 : 1 3 : 500 5 : 10 20 : 100 

다음과 같은 경우에는 std::unordered_map을 사용하세요.

  • 일부 데이터(예: 문자열)의 수를 유지해야 하며 순서가 필요하지 않습니다.
  • 단일 요소 액세스, 즉 순회가 필요하지 않습니다.

CPP




// CPP program to demonstrate use of> // std::unordered_map> #include> int> main()> {> > // Unordered map> > std::unordered_map <> int> ,> int> >주문;> > // Mapping values to keys> > order[5] = 10;> > order[3] = 500;> > order[20] = 100;> > order[1] = 1;> > // Iterating the map and> > // printing unordered values> > for> (> auto> i = order.begin();> > i != order.end(); i++)> > {> > std::cout < < ' : ' ' '; } }>

산출

1 : 1 20 : 100 3 : 500 5 : 10 

차이점을 표 형식으로 살펴보겠습니다.

지도 순서가 없는_지도
1. 맵은 #include 헤더 파일에 정의되어 있습니다. unordered_map은 #include 헤더 파일에 정의되어 있습니다.
2. 에 의해 구현됩니다 레드 블랙 트리 . 해시 테이블을 사용하여 구현됩니다.
삼. 느리다. 그것은 빠릅니다.
4. 시간 복잡도 연산의 경우 O(log N)입니다. 작업의 시간 복잡도는 O(1)입니다.
5. map은 키별로 정렬된 순서대로 요소를 키, 값 쌍으로 저장하는 데 사용됩니다. unordered_map은 정렬되지 않은 순서로 요소를 키, 값 쌍으로 저장하는 데 사용됩니다.