std::unordered_map
- C++ kursu
- Orta seviye
- Ders 56/116
- 5 dk
std::unordered_map ile hash tabanlı map'i öğrenirsin.
std::unordered_map
std::unordered_map, karma tablo (hash table) tabanlı bir anahtar-değer kapsayıcısıdır. Ortalama ekleme ve erişim O(1)'dir. Öğeler sıralanmaz; sıralama gerekmiyorsa map'ten daha hızlıdır.
Örnek: std::unordered_map<std::string, int> m; m["apple"] = 3;. m["apple"] ortalama O(1)'de 3 döndürür. map'te aynı işlem O(log n)'dir. Sıralı gezmek gerekmiyorsa unordered_map tercih edilir. Anahtar türünün std::hash uzmanlığı olmalıdır; std::string ve temel türler için hazırdır.
hash function
unordered_map, anahtarları karma işlevi (hash function) ile kovalara (bucket) dağıtır. İyi dağılım O(1) sağlar; kötü dağılım O(n)'e düşer. Çakışmalar (collision) ayrı zincirle çözülür.
Özel türler için karma uzmanlığı yazmanız gerekir. std::string, int, double için hazır std::hash vardır. Örnek: std::hash<std::string> bir dizeyi tamsayıya dönüştürür. Bu tamsayı, kova indeksi verir. m["apple"] = 3; çağrısında önce karma hesaplanır, sonra kova bulunur.
Uygulama unordered_map ile çalış
std::unordered_map<std::string, int> m; oluştur. m["apple"] = 3; ve m["pear"] = 5; ekle. m.size()'ı yazdır.
Başlangıç kodu
#include <iostream>
#include <unordered_map>
#include <string>
// unordered_map oluştur ve iki öğe ekle
int main() {
// boyutu yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <unordered_map>
#include <string>
int main() {
std::unordered_map<std::string, int> m;
m["apple"] = 3;
m["pear"] = 5;
std::cout << m.size() << std::endl;
return 0;
}Beklenen çıktı
2
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 unordered_map'in avantajı nedir?
std::unordered_map<std::string, int> m;- Sıralı anahtarlar
- Ortalama O(1) erişim Doğru cevap
- Daha az bellek
- Sabit boyut
Açıklama: unordered_map ortalama O(1) erişim sağlar.
2 unordered_map bildirimi
std::unordered_map<std::string, ____> m;
std::unordered_map<std::string, int> m;
Açıklama: Değer türü int'tir; std::unordered_map<std::string, int> m;
3 Kavramı eşle
| Kavram | Anlamı |
|---|---|
hash table |
unordered_map temeli |
O(1) lookup |
Hızlı erişim |
unordered |
Sıralı değil |
bucket |
Hash bölmesi |