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. |