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[]veyaat()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[]veyaat()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.