logo

map vs unordered_map w C++

Warunek wstępny: std::mapa , std::unordered_map
Jeśli chodzi o wydajność, istnieje ogromna różnica między mapami a mapami nieuporządkowanymi.
Musimy znać wewnętrzne działanie obu, aby zdecydować, który z nich ma zostać użyty.

Różnica :



 | 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) ->Średnia | | O(n) -> Czas wstawienia najgorszego przypadku | log(n) + Przywrócenie równowagi | Podobnie jak w przypadku wyszukiwania. Czas usunięcia | log(n) + Przywrócenie równowagi | To samo co wyszukiwanie>

Użyj std::map kiedy

  • Potrzebujesz uporządkowanych danych.
  • Musiałbyś wydrukować/uzyskać dostęp do danych (w kolejności posortowanej).
  • Potrzebujesz poprzednika/następcy elementów.
  • Zobacz zalety BST w porównaniu z Hash Tabl e, aby uzyskać więcej przypadków.

CPP

pole listy HTML








// CPP program to demonstrate use of std::map> #include> int> main()> {> >// Ordered map> >std::map<>int>,>int>>zamów;> >// 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 << ' : ' ' '; } }>

>

nazwa miasta w USA

>

Wyjście

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

Użyj std::unordered_map kiedy

cm na stopy i cale
  • Musisz liczyć niektóre dane (przykład – ciągi znaków) i nie jest wymagane żadne porządkowanie.
  • Potrzebujesz dostępu do pojedynczego elementu, tj. Bez przechodzenia.

CPP




który stworzył szkołę

// CPP program to demonstrate use of> // std::unordered_map> #include> int> main()> {> >// Unordered map> >std::unordered_map<>int>,>int>>zamów;> >// 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 << ' : ' ' '; } }>

>

>

Wyjście

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

Zobaczmy różnice w formie tabelarycznej -:

mapa nieuporządkowana_mapa
1. mapa jest zdefiniowana w pliku nagłówkowym #include unordered_map jest zdefiniowana w pliku nagłówkowym #include
2. Jest realizowany przez czerwono-czarne drzewo . Jest to realizowane przy użyciu tablicy mieszającej.
3. To jest wolne. To jest szybkie.
4. Złożoność czasowa dla operacji wynosi O(log N) Złożoność czasowa operacji wynosi O(1)
5. map służy do przechowywania elementów jako par kluczy i wartości w kolejności posortowanej według klucza. unordered_map służy do przechowywania elementów jako par klucz-wartość w nieposortowanej kolejności.