Sobes.tech
Junior

C++'ta map ve unordered_map konteynerleri arasındaki fark nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Temel fark, öğelerin nasıl saklandığı ve alındığı ile ilgilidir:

  • std::map: Öğeleri anahtar sırasına göre sıralı şekilde saklar. Genellikle kırmızı-siyah ağaç temel alınarak uygulanır. Arama, ekleme ve silme işlemleri O(log N) zaman karmaşıklığına sahiptir, burada N öğe sayısıdır.
  • std::unordered_map: Öğeleri bir karma tablo (hash table) içinde saklar. Öğelerin sırası rastgeledir. Ortalama olarak, arama, ekleme ve silme işlemleri O(1) zamanında gerçekleşir. En kötü durumda, çakışmalar nedeniyle, karmaşıklık O(N) olabilir.
Özellik std::map std::unordered_map
Sıralama Anahtar ile (artan sıralama) Hayır
Temel yapı Kırmızı-siyah ağaç Karma tablo
Ortalama karmaşıklık O(log N) O(1)
En kötü durum O(log N) O(N)
Anahtar gereksinimleri < operatörü Karma fonksiyon ve ==

Kullanım örneği:

#include <map>
#include <unordered_map>
#include <string>
#include <iostream>

int main() {
    // std::map: öğeler anahtara göre sıralanmış
    std::map<std::string, int> sorted_map;
    sorted_map["banana"] = 3;
    sorted_map["apple"] = 1;
    sorted_map["cherry"] = 2;

    // Çıktı: apple 1, banana 3, cherry 2 (sıra önemlidir)
    for (const auto& pair : sorted_map) {
        std::cout << pair.first << " " << pair.second << std::endl;
    }

    std::cout << "---" << std::endl;

    // std::unordered_map: öğelerin sırası garanti edilmez
    std::unordered_map<std::string, int> unordered_map;
    unordered_map["banana"] = 3;
    unordered_map["apple"] = 1;
    unordered_map["cherry"] = 2;

    // Çıktı farklı olabilir (örneğin, cherry 2, apple 1, banana 3)
    for (const auto& pair : unordered_map) {
        std::cout << pair.first << " " << pair.second << std::endl;
    }

    return 0;
}