Middle
Ինչ է C++-ում map և unordered_map կոնտեյներների հետ աշխատելու բարդությունը։
sobes.tech AI
Պատասխան AI-ից
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 ապահովում է լոգարիթմիկ բարդություն անկախ տվյալներից, պահպանում է տարրերը դասավորված կարգով և չի պահանջում հեշ ֆունկցիա բանալի տիպի համար: