Předpoklad : std::map , std::unordered_map
Pokud jde o efektivitu, je obrovský rozdíl mezi mapami a neuspořádanými mapami.
Musíme znát vnitřní fungování obou, abychom se rozhodli, který z nich bude použit.
rozdíl:
| 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) ->Průměr | | O(n) -> Doba vložení nejhoršího případu | log(n) + Rebalance | Stejné jako vyhledávání Čas smazání | log(n) + Rebalance | Stejné jako vyhledávání>
Použít std::map když
- Potřebujete objednaná data.
- Museli byste data vytisknout/zpřístupnit (v seřazeném pořadí).
- Potřebujete předchůdce/nástupce prvků.
- Další případy viz výhody BST oproti Hash Tabl e.
CPP
převést řetězec na enum
// CPP program to demonstrate use of std::map> #include> int> main()> {> >// Ordered map> >std::map<>int>,>int>>objednávka;> >// 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 << ' : ' '
'; } }> |
>
ssis
>Výstup
1 : 1 3 : 500 5 : 10 20 : 100>
Použijte std::unordered_map když
- Některá data (Příklad – řetězce) je potřeba udržovat v počtu a není nutné žádné řazení.
- Potřebujete přístup k jedinému prvku, tj. žádné procházení.
CPP
java booleovský řetězec
// CPP program to demonstrate use of> // std::unordered_map> #include> int> main()> {> >// Unordered map> >std::unordered_map<>int>,>int>>objednávka;> >// 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 << ' : ' '
'; } }> |
lambda funkce java
>
>Výstup
1 : 1 20 : 100 3 : 500 5 : 10>
Podívejme se na rozdíly v tabulkové formě -:
| mapa | neuspořádaná_mapa | |
| 1. | mapa je definována v #include záhlaví souboru | unordered_map je definována v #include záhlaví souboru |
| 2. | Je implementován pomocí červeno-černý strom . | Je implementován pomocí hash tabulky. |
| 3. | Je to pomalé. | Je to rychlé. |
| 4. | Časová složitost pro operace je O(log N) | Časová složitost operací je O(1) |
| 5. | mapa se používá k ukládání prvků jako párů klíč, hodnota v pořadí seřazené podle klíče. | unordered_map se používá k ukládání prvků jako párů klíč, hodnota v nesetříděném pořadí. |