Sobes.tech
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 ապահովում է լոգարիթմիկ բարդություն անկախ տվյալներից, պահպանում է տարրերը դասավորված կարգով և չի պահանջում հեշ ֆունկցիա բանալի տիպի համար: