map проти unordered_map у C++

Попередня умова: std::map , std::unordered_map
Що стосується ефективності, існує величезна різниця між картами та невпорядкованими картами.
Ми повинні знати внутрішню роботу обох, щоб вирішити, який з них використовувати.

Різниця:

 | 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) ->Середній | | O(n) -> Час вставки в найгіршому випадку | log(n) + Rebalance | Те саме, що пошук Час видалення | log(n) + Rebalance | Те саме, що пошук 

Використовуйте std::map, коли

  • Вам потрібні впорядковані дані.
  • Вам потрібно буде роздрукувати/отримати доступ до даних (у відсортованому порядку).
  • Вам потрібен попередник/наступник елементів.
  • Перегляньте переваги BST перед Hash Table для інших випадків.

CPP




// CPP program to demonstrate use of std::map> #include> int> main()> {> > // Ordered map> > std::map <> int> ,> int> >порядок;> > // 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 < < ' : ' ' '; } }>

Вихід

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

Використовуйте std::unordered_map, коли

  • Вам потрібно вести підрахунок деяких даних (приклад – рядки), і впорядкування не потрібне.
  • Вам потрібен доступ до одного елемента, тобто без обходу.

CPP




// CPP program to demonstrate use of> // std::unordered_map> #include> int> main()> {> > // Unordered map> > std::unordered_map <> int> ,> int> >порядок;> > // 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 < < ' : ' ' '; } }>

Вихід

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

Розглянемо відмінності у вигляді таблиці -:

карта unordered_map
1. карту визначено у файлі заголовка #include unordered_map визначено у файлі заголовка #include
2. Його реалізує червоно-чорне дерево . Це реалізовано за допомогою хеш-таблиці.
3. Це повільно. Це швидко.
4. Часова складність для операцій є O(log N) Часова складність операцій становить O(1)
5. map використовується для зберігання елементів як пар ключів і значень у порядку, відсортованих за ключем. unordered_map використовується для зберігання елементів як пар ключ-значення в несортованому порядку.