Sobes.tech
Middle

C++'ta map ve unordered_map konteynerleriyle çalışmanın karmaşıklığı nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

std::map (Kırmızı-siyah ağaç)

  • Ekleme, silme, arama: Ortalama O(log N) ve en kötü durumda O(log N). N, öğe sayısıdır.
  • Anahtar kullanarak erişim operator[] veya at() yöntemiyle: O(log N).
  • Başlangıca/sona iterator alma: O(1).
  • Tüm öğeler üzerinde yineleme: O(N).
  • Bellek: O(N).

std::unordered_map (Hash tablosu)

  • Ekleme, silme, arama: Ortalama O(1). En kötü durumda O(N) (hash çakışmaları güçlü olduğunda). N, öğe sayısıdır.
  • Anahtar kullanarak erişim operator[] veya at() yöntemiyle: O(1) ortalama. En kötü durumda O(N).
  • Başlangıca/sona iterator alma: O(1).
  • Tüm öğeler üzerinde yineleme: Ortalama O(N). Yineleme sırası garanti edilmez.
  • Bellek: O(N). Yükleme faktörüne ve hash tablosu uygulamasına bağlıdır.

Karşılaştırma:

İşlem std::map (O) std::unordered_map (O)
Ekleme, Silme log N 1 (ortalama), N (en kötü)
Arama log N 1 (ortalama), N (en kötü)
Anahtar erişimi log N 1 (ortalama), N (en kötü)
Tüm öğeleri yineleme N N (ortalama)

std::unordered_map genellikle tekil işlemler (ekleme, arama, silme) için daha hızlıdır, çünkü ortalama O(1). Ancak iyi bir hash fonksiyonu gerektirir ve çakışmalara duyarlıdır. std::map ise verilerden bağımsız olarak logaritmik karmaşıklık sağlar, öğeleri sıralı tutar ve anahtar tipi için hash fonksiyonu gerekmez.