Haritada C++ Standart Şablon Kitaplığı (STL)
Harita Nedir? C++? Sözdizimi
In C++, MAP öğeleri eşlenmiş bir biçimde depolayan ilişkisel bir kaptır. Haritadaki her öğe anahtar/değer ve eşlenen değerden oluşur. Eşlenen iki değer aynı anahtar değerleri paylaşamaz.
Anahtar değerler, öğeleri benzersiz şekilde sıralamak ve tanımlamak için kullanışlıdır. Eşlenen değerler, anahtarla ilişkili içeriği depolamak içindir. İkisinin türleri farklı olabilir, ancak üye türü bunları her ikisini de birleştiren bir çift türü aracılığıyla birleştirir.
Neden std::map kullanıyorsunuz?
Haritayı kullanmanın nedenleri şunlardır:
- std:: harita, benzersiz anahtarları yalnızca seçilen sıralama kriterlerine göre sıralanmış düzende saklar.
- Tuşu kullanarak öğeleri aramak kolay ve hızlıdır.
- Her tuşa yalnızca bir öğe eklenmiştir.
- std::map ilişkisel bir dizi olarak kullanılabilir.
- std::map ikili ağaçlar (dengeli) kullanılarak uygulanabilir.
Sözdizimi
Std::map'i bildirmek için şu sözdizimini kullanın:
std::map<key_datatype, value_datatype>map_name;
- The
key_datatype
harita anahtarlarının veri tipini belirtir. - The
value_datatype
harita anahtarlarına karşılık gelen değerlerin veri tipini belirtir. - The
map_name
haritanın adıdır.
Örneğin:
map<string, int> my_map;
adında bir harita ilan ettik. my_map
. Haritanın şu şekilde bir dizesi olacak: anahtar veri türleri ve tam sayı olarak değerlerimiz veri tipi.
Üye türleri
Üye fonksiyonları, parametre veya dönüş tipi olarak aşağıdaki üye tiplerini kullanabilir:
- anahtar türü: Anahtar (Şablondaki ilk parametre)
- eşlenen_tip: T (Şablondaki ikinci parametre)
- anahtar_karşılaştır: Karşılaştır (Şablondaki üçüncü parametre)
- ayırıcı_türü: Alloc (Şablondaki dördüncü parametre)
- değer türü: çift
- değer_karşılaştır: Öğeleri karşılaştırmak için iç içe geçmiş işlev sınıfı
- referans: tahsisat_türü::referans
- const_reference: allocator_type::const_reference
- işaretçi: ayırıcı_tipi::işaretçi
- const_pointer: allocator_type::const_pointer
- yineleyici: value_type'a çift yönlü bir yineleyici
- const_iterator: const value_type'a çift yönlü bir yineleyici
- ters_iteratör: ters yineleyici
- const_reverse_iterator: sürekli bir ters yineleyici
- fark_tipi: ptrdiff_t
- Beden Çeşidi: size_t
std::map'in Yerleşik İşlevleri
std::map yerleşik işlevlerle birlikte gelir. Bunlardan bazıları şunlardır:
- başlamak() - Bu işlev yineleyiciyi haritanın ilk öğesine döndürür.
- boyut() -Bu işlev bir haritadaki öğelerin sayısını döndürür.
- boş() -Bu işlev, haritanın boş olup olmadığını belirten bir Boolean değeri döndürür.
- insert( çift(anahtar, değer)) – Bu işlev, bir haritaya yeni anahtar/değer çifti ekler.
- bul(val) – Bu fonksiyon, val elemanı bulunursa yineleyiciyi verir. Aksi takdirde, m.end() döndürür.
- Sil (yineleyici konumu) – Bu işlev, yineleyicinin işaret ettiği konumdaki öğeyi siler.
- sil(const g) – Bu işlev, g anahtar/değer çiftini haritadan siler.
- Temizlemek () -Bu işlev bir haritadaki tüm öğeleri siler.
Harita Öğeleri Üzerinde Yineleme
Harita öğeleri üzerinde yineleme yapabilirsiniz. Bunun için sadece bir yineleyici oluşturup onu kullanmamız gerekiyor.
Örneğin:
Örnek 1:
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<int, string> Students; Students.insert(std::pair<int, string>(200, "Alice")); Students.insert(std::pair<int, string>(201, "John")); cout << "Map size is: " << Students.size() << endl; cout << endl << "Default map Order is: " << endl; for (map<int, string>::iterator it = Students.begin(); it != Students.end(); ++it) { cout << (*it).first << ": " << (*it).second << endl; } }
Çıktı:
İşte kodun ekran görüntüsü:
Kod Açıklaması:
- İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
- İşlevlerini kullanmak için dize başlık dosyasını kodumuza ekleyin.
- İşlevlerini kullanmak için harita başlık dosyasını kodumuza ekleyin.
- Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
- Ara
main()
işlev. { işlevin gövdesinin başlangıcını belirtir. - Anahtarların tamsayı ve değerlerin dize olacağı Öğrenciler adında bir harita oluşturun.
- Haritaya değerler ekleyin Öğrenciler. Haritaya 200'lük bir anahtar ve Alice'in değeri eklenecektir.
- Haritaya değerler ekleyin Öğrenciler. Haritaya 201 anahtarı ve John değeri eklenecektir.
- Kullan
size()
Öğrenciler adlı haritanın boyutunu alma işlevi. Bu 2 değerini döndürmelidir. - Konsola bir miktar metin yazdırın.
- Öğrenciler adlı haritanın öğeleri üzerinde yineleme yapacak şekilde adlandırılmış bir yineleyici oluşturmak için bir for döngüsü kullanın.
- Öğrenciler haritasının değerlerini konsola yazdırın.
- For döngüsünün gövdesinin sonu.
- Vücudun sonu
main()
fonksiyonu.
Std::map'e veri ekleme
Öğeleri std::map'e aşağıdaki komutu kullanarak girebilirsiniz: insert()
işlev. std::map anahtarlarının benzersiz olması gerektiğini unutmayın.
Bu nedenle öncelikle haritada her bir anahtarın mevcut olup olmadığını kontrol eder. Mevcutsa giriş eklenmeyecektir ancak mevcut girişin yineleyicisini döndürür. Mevcut değilse, giriş eklenir.
Fonksiyonun şu varyasyonları vardır:
- ekle(çift) – bu varyasyonla haritaya bir anahtar/değer çifti eklenir.
- ekle(başlangıç_itr, bitiş_itr) – bu varyasyonla, girişler başka bir haritadan start_itr ve end_itr ile tanımlanan aralık içerisine eklenecektir.
The insert_or_assing() işlevi aynı şekilde çalışır insert()
işlev, ancak verilen anahtar haritada zaten mevcutsa değeri değiştirilecektir.
Örnek 2:
#include <map> #include <iostream> using namespace std; int main() { map<int, int> m{ {1,3} , {2,4} , {3,5} }; m.insert({ 5, 6 }); m.insert({ 1, 8 }); m.insert_or_assign(1, 6); cout << "Key\tElement\n"; for (auto itr = m.begin(); itr != m.end(); ++itr) { cout << itr->first << '\t' << itr->second << '\n'; } return 0; }
Çıktı:
İşte kodun ekran görüntüsü:
Kod Açıklaması:
- İşlevlerini kullanmak için harita başlık dosyasını kodumuza ekleyin.
- İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
- Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
- Ara
main()
işlev. { işlevin gövdesinin başlangıcını belirtir. - Anahtarların tam sayı, değerlerin ise tam sayı olacağı m adında bir harita oluşturun. Haritaya üç giriş yapıldı.
- Haritaya yeni bir giriş ekleyin m. Haritaya 5'lik bir anahtar ve 6'lık bir değer eklenecektir.
- Zaten mevcut bir anahtara giriş yapılmaya çalışılıyor. 1 anahtarı haritada mevcut olduğundan giriş yapılmayacaktır.
- Kullanma
insert_or_assign()
Mevcut bir girişi ekleme veya değiştirme işlevi. 1 anahtarı zaten mevcut olduğundan değeri 6 olarak değiştirilecektir. - Konsola bir miktar metin yazdırın. “\t” karakteri yatay bir boşluk oluştururken, “\n” karakteri fare imlecini bir sonraki satıra taşır.
- Kullanmak döngü için m adlı haritanın öğeleri üzerinde yineleme yapacak itr adında bir yineleyici oluşturmak.
- m haritasının değerlerini konsola yazdırın. “\t” karakteri, her tuş ile ona karşılık gelen değer arasında yatay bir boşluk oluşturur. Bunun aksine, “\n” karakteri fare imlecini her yinelemeden sonra bir sonraki satıra hareket ettirir.
- For döngüsünün gövdesinin sonu.
- Program başarılı bir şekilde tamamlandıktan sonra değeri döndürmelidir.
- Vücudun sonu
main()
fonksiyonu.
Haritada Arama
Biz kullanabilirsiniz find()
Bir haritadaki öğeleri anahtarlarına göre arama işlevi. Anahtar bulunamazsa, işlev std::map::end döndürür. Aksi takdirde, aranan öğenin bir yineleyicisi döndürülür.
Örnek 3:
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<int, string> Students; Students.insert(std::pair<int, string>(200, "Alice")); Students.insert(std::pair<int, string>(201, "John")); std::map<int, string>::iterator it = Students.find(201); if (it != Students.end()) { std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n'; } }
Çıktı:
İşte kodun ekran görüntüsü:
Kod Açıklaması:
- Fonksiyonlarını hata almadan kullanabilmek için iostream başlık dosyasını kodumuza ekleyin.
- Fonksiyonlarını hata almadan kullanabilmek için string başlık dosyasını kodumuza ekleyin.
- Harita başlık dosyasını hata almadan fonksiyonlarını kullanabilmek için kodumuza ekleyin.
- Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
- Ara
main()
işlev. { gövdesinin başlangıcını işaret edermain()
fonksiyonu. - Anahtarları tamsayılar ve değer dizeleri olacak olan Öğrenciler adında bir harita oluşturun.
- Haritaya değerler ekleyin Öğrenciler. Haritaya 200'lük bir anahtar ve Alice'in değeri eklenecektir.
- Haritaya değerler ekleyin Öğrenciler. Haritaya 201 anahtarı ve John değeri eklenecektir.
- 201 anahtarıyla ilişkili değeri arayın.
- Anahtarın değerinin bulunup bulunmadığını kontrol etmek için bir if ifadesi kullanın.
- Anahtarın değerini konsoldaki bir metnin yanına yazdırın.
- If ifadesinin gövdesinin sonu.
- Vücudun sonu
main()
fonksiyonu.
Haritadan Veri Silme
Biz kullanabilirsiniz erase()
Haritadan bir değeri silme işlevi. Basitçe silinecek öğeyi işaret eden bir yineleyici oluştururuz. Daha sonra yineleyiciye iletilir. erase()
fonksiyonu.
Örnek 4:
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<std::string, int> my_map; my_map.insert(std::make_pair("cow", 1)); my_map.insert(std::make_pair("cat", 2)); my_map["lion"] = 3; map<std::string, int>::iterator it = my_map.find("cat"); my_map.erase(it); for (map<string, int>::iterator it = my_map.begin(); it != my_map.end(); ++it) cout << (*it).first << ": " << (*it).second << endl; return 0; }
Çıktı:
İşte kodun ekran görüntüsü:
Kod Açıklaması:
- İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
- İşlevlerini kullanmak için dize başlık dosyasını kodumuza ekleyin.
- İşlevlerini kullanmak için harita başlık dosyasını kodumuza ekleyin.
- Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza ekleyin.
- Ara
main()
işlev. {, gövdenin başlangıcını işaret edermain()
fonksiyonu. - Anahtarları dizeler ve değerler tamsayıları olacak olan my_map adında bir harita oluşturun.
- Değerleri my_map haritasına ekleyin. Haritaya Cow anahtarı ve 1 değeri eklenecektir.
- Değerleri my_map haritasına ekleyin. Haritaya Cat anahtarı ve 2 değeri eklenecektir.
- Bir aslanın anahtarıyla my_map haritasına 3 değerini ekleyin.
- Anahtar kediyi bulmak için my_map haritası üzerinde yineleme yapmak üzere bir yineleyici oluşturun.
- Yineleyicinin işaret ettiği öğeyi silin.
- My_map haritasının öğelerini baştan sona yinelemek için bir yineleyici kullanın.
- My_map haritasının içeriğini konsolda yazdırın.
- Programın başarılı bir şekilde tamamlanmasının ardından çıktıyı döndürmesi gerekir.
- Vücudun sonu
main()
fonksiyonu.
ÖZET
- Harita, öğeleri eşlenmiş bir biçimde depolayan ilişkisel bir kapsayıcıdır.
- Haritadaki her öğenin bir anahtar değeri ve eşlenen bir değeri vardır.
- Bir haritada eşlenen iki değer, anahtar değerleri paylaşamaz.
- Anahtar değerler, öğelerin benzersiz şekilde sıralanmasına ve tanımlanmasına yardımcı olur.
- Eşlenen değerler, anahtarla ilişkili içeriğin depolanmasına yardımcı olur.
- C++ harita benzersiz anahtarları sıralı düzende saklar.
- Birlikte çalışmak C++ haritada, öğeler üzerinde yineleme yapacak bir yineleyici yaratırız.
- Yineleyici ile haritadaki öğeleri arama ve silme gibi görevleri gerçekleştirebiliriz.