logo

mapa vs unordered_map v C++

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