Middle
Koja je složenost rada sa kontejnerima map i unordered_map u C++?
sobes.tech АИ
Одговор од АИ
std::map (Црвено-црни дрва)
- Уметање, брисање, претрага: O(log N) у просеку и у најгорем случају. N — број елемената.
- Приступ по кључу помоћу
operator[]или методеat(): O(log N). - Добијање итератора на почетак/крај: O(1).
- Итерација преко свих елемената: O(N).
- Памћење: O(N).
std::unordered_map (Хеш табела)
- Уметање, брисање, претрага: O(1) у просеку. O(N) у најгорем случају (када постоје јаки колизиони хеша). N — број елемената.
- Приступ по кључу помоћу
operator[]или методеat(): O(1) у просеку. O(N) у најгорем случају. - Добијање итератора на почетак/крај: O(1).
- Итерација преко свих елемената: O(N) у просеку. Редослед итерације није загарантован.
- Памћење: O(N). Зависи од коефицијента оптерећења и имплементације хеш табеле.
Поређење:
| Операција | std::map (O) |
std::unordered_map (O) |
|---|---|---|
| Уметање, брисање | log N | 1 (просек), N (најгоре) |
| Претрага | log N | 1 (просек), N (најгоре) |
| Приступ по кључу | log N | 1 (просек), N (најгоре) |
| Итерација преко свих елемената | N | N (просек) |
std::unordered_map је генерално бржи за појединачне операције (уметнуће, претрагу, брисање) захваљујући O(1) у просеку, али захтева добру хеш функцију и осетљив је на колизије. std::map гарантује логаритамску сложеност независно од података, одржава елементе у сортираном реду и не захтева хеш функцију за тип кључа.