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




// 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 < < ' : ' ' '; } }>

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




// 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 < < ' : ' ' '; } }>

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