crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Maps ve Sets: Veriye Doğrudan ve Hızlı Erişim
Bu yapılar, verileri bellekte rastgele değil, belirli bir matematiksel düzen (genellikle Red-Black Tree veya Hash Table) ile tutarlar. Bu sayede arama, ekleme ve silme işlemleri devasa veri setlerinde bile çok hızlı gerçekleşir.
1. std::set: Sadece Benzersiz Değerler
set, içindeki her bir elemanın benzersiz (unique) olduğu bir koleksiyondur. Bir değeri set içine on kere eklemeye çalışsanız bile o sadece bir kez kaydedilir. Ayrıca elemanları otomatik olarak sıralı tutar.
Kullanım Alanı: Bir listedeki mükerrer kayıtları temizlemek veya bir değerin listede olup olmadığını çok hızlı kontrol etmek.
C++:
#include <set>
std::set<int> sayilar;
sayilar.insert(10);
sayilar.insert(20);
sayilar.insert(10); // Bu eklenmez, 10 zaten var!
cout << "Eleman sayisi: " << sayilar.size(); // Sonuc: 2
2. std:
Anahtar-Değer (Key-Value) İlişkisi
map, bir "anahtar" (Key) kullanarak bir "değere" (Value) ulaşmanızı sağlayan bir sözlük yapısıdır. Tıpkı gerçek bir sözlükte kelimeye bakıp anlamını bulmak gibi.
Key (Anahtar): Değere ulaşmak için kullanılan benzersiz kimlik (Örn: Öğrenci No).
Value (Değer): Anahtara bağlı olan veri (Örn: Öğrenci Adı).
C++:
#include <map>
std::map<int, string> ogrenciler;
ogrenciler[101] = "Ahmet";
ogrenciler[102] = "Mehmet";
cout << "101 nolu ogrenci: " << ogrenciler[101]; // Ahmet
3. Map vs. Unordered_Map: Hangisi Daha Hızlı?
C++'ta bu yapıların iki ana türü vardır. Aralarındaki fark, veriyi arka planda nasıl organize ettikleridir:
| Özellik | std::map / std::set | std::unordered_map / set |
|---|---|---|
| Arka Plan Yapısı | Dengeli Ağaç (Tree). | Karma Tablosu (Hash Table). |
| Sıralama | Elemanlar her zaman sıralıdır. | Sıralama garantisi yoktur. |
| Arama Hızı | O(log n) - Çok hızlı. | O(1) - Süper hızlı. |
| Bellek Kullanımı | Daha az. | Daha fazla (Hash tabloları için). |
4. Kritik Bir İpucu: find() ve count()
Bir anahtarın haritada olup olmadığını kontrol etmek için [] operatörünü kullanmak tehlikeli olabilir, çünkü eğer anahtar yoksa map o anahtarı otomatik olarak oluşturur. Bunun yerine güvenli yöntemleri kullanın:
C++:
if (ogrenciler.find(105) != ogrenciler.end()) {
cout << "Ogrenci bulundu!";
} else {
cout << "Boyle bir kayit yok.";
}
Sonuç
Eğer verileriniz arasında hızlıca "arama" yapmanız gerekiyorsa veya verileri her zaman sıralı tutmak istiyorsanız Map ve Set sizin en iyi dostunuzdur. Özellikle büyük projelerde, arama maliyetini O