Junior
C++'ta map ve unordered_map arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
std::map — anahtar-değer çiftlerini tutan, anahtar sırasına göre sıralanmış ilişkisel konteyner. Kırmızı-siyah ağaç tabanlıdır. Erişim, ekleme ve silme işlemlerinin süresi logaritmik (O(log n)).
std::unordered_map — anahtar-değer çiftlerini bir karma tablo içinde tutan ilişkisel konteyner. Öğeler sıralı değildir. Ortalama erişim, ekleme ve silme süresi sabit (O(1)), ancak en kötü durumda zincirleme çakışmaları nedeniyle doğrusal (O(n)) olabilir. Anahtar tipi için bir karma fonksiyonu ve eşitlik karşılaştırma operatörü (operator==) gerektirir.
| Özellik | std::map |
std::unordered_map |
|---|---|---|
| Temel | Kırmızı-siyah ağaç | Karma tablo |
| Öğelerin sıralanması | Anahtar ile | Yok |
| Ortalama işlem karmaşıklığı | O(log n) | O(1) |
| En kötü işlem karmaşıklığı | O(log n) | O(n) (çakışmalar nedeniyle) |
| Anahtar gereksinimleri | < operatörü |
Karma fonksiyon, == operatörü |
| Bellek kullanımı | Daha fazla | Daha az (ortalama, değişebilir) |
Kullanım örneği:
#include <map>
#include <unordered_map>
#include <string>
int main() {
// std::map kullanımı
std::map<std::string, int> my_map;
my_map["apple"] = 1;
my_map["banana"] = 2;
my_map["orange"] = 3;
// Öğeler anahtar sırasına göre sıralanır (apple, banana, orange)
// std::unordered_map kullanımı
std::unordered_map<std::string, int> my_unordered_map;
my_unordered_map["apple"] = 1;
my_unordered_map["banana"] = 2;
my_unordered_map["orange"] = 3;
// Öğeler sırasızdır
return 0;
}