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;
}