C ++ Standart Şablon Kitaplığında (STL) Örnekle Eşleme

İçindekiler:

Anonim

Std :: map nedir?

C ++ 'da, bir MAP , öğeleri eşlenmiş bir biçimde depolayan ilişkili bir kapsayıcıdır. Haritadaki her öğe, anahtar / değer çiftinden ve eşlenmiş bir değerden oluşur. Eşlenen iki değer aynı anahtar değerlerini paylaşamaz.

Anahtar değerler, öğeleri benzersiz bir şekilde sıralamak ve tanımlamak için iyidir. Eşlenen değerler, anahtarla ilişkili içeriği depolamak içindir. İkisinin türleri farklı olabilir, ancak üye türü, her ikisini de birleştiren bir çift türü aracılığıyla bunları birleştirir.

Bu C ++ eğitiminde şunları öğreneceksiniz:

  • Std :: map nedir?
  • Neden std :: map kullanıyorsunuz?
  • Sözdizimi:
  • Üye türleri:
  • Yerleşik İşlevler
  • Harita Öğeleri Üzerinde Yineleme
  • Std :: map'e veri eklemek:
  • Bir Haritada Arama
  • Bir Haritadan Veri Silme

Neden std :: map kullanıyorsunuz?

Harita kullanma nedenleri şunlardır:

  • std :: map, benzersiz anahtarları yalnızca seçilen sıralama ölçütlerine göre sıralanmış düzende depolar.
  • Anahtarı kullanarak öğeleri aramak kolay ve daha hızlıdır.
  • Her anahtara yalnızca bir öğe eklenir.
  • std :: map, ilişkilendirilebilir bir dizi olarak kullanılabilir.
  • std :: map ikili ağaçlar kullanılarak uygulanabilir (dengeli).

Sözdizimi:

Std :: map'i bildirmek için şu sözdizimini kullanın:

std::mapmap_name;
  • Key_datatype, eşleme anahtarlarının veri türünü belirtir.
  • Değer_datatipi, eşleme anahtarlarına karşılık gelen değerlerin veri türünü belirtir.
  • Map_name, haritanın adıdır.

Örneğin:

map my_map;

My_map adında bir harita ilan ettik. Harita, anahtar veri türleri olarak bir dizeye ve değerler veri türü olarak tamsayıya sahip olacaktır .

Üye türleri:

Üye işlevleri, aşağıdaki üye türlerini parametre veya dönüş türü olarak kullanabilir:

  • key_type: Anahtar (Şablondaki ilk parametre)
  • mapped_type: T (Şablondaki ikinci parametre)
  • key_compare: Karşılaştır (şablondaki üçüncü parametre)
  • allocator_type: Alloc (Şablondaki dördüncü parametre)
  • değer_türü: çift ​​
  • value_compare: Öğeleri karşılaştırmak için iç içe geçmiş işlev sınıfı
  • başvuru: allocator_type :: başvuru
  • const_reference: allocator_type :: const_reference
  • işaretçi: allocator_type :: işaretçi
  • const_pointer: allocator_type :: const_pointer
  • yineleyici: değer_türü için iki yönlü bir yineleyici
  • const_iterator: const value_type için iki yönlü bir yineleyici
  • reverse_iterator: ters yineleyici
  • const_reverse_iterator: sabit bir ters yineleyici
  • fark_türü : ptrdiff_t
  • size_type: size_t

Yerleşik İşlevler

std :: map yerleşik işlevlerle birlikte gelir. Bunlardan bazıları şunları içerir:

  • begin () - Bu işlev yineleyiciyi haritanın ilk öğesine döndürür.
  • size () - Bu işlev, bir haritadaki öğelerin sayısını döndürür.
  • empty () - Bu işlev, bir haritanın boş olup olmadığını gösteren bir Boolean değeri döndürür.
  • insert (pair (key, value)) - Bu işlev, bir haritaya yeni anahtar / değer çifti ekler.
  • find (val) - Bu işlev, eğer bulunursa yineleyiciyi val öğesine verir. Aksi takdirde m.end () dönecektir.
  • Silme (yineleyici konumu) - Bu işlev, öğeyi yineleyicinin gösterdiği konumdan siler.
  • silme (const g) - Bu işlev, g anahtar / değer çiftini bir haritadan siler.
  • Temizle () - Bu işlev, bir haritadaki tüm öğeleri siler.

Harita Öğeleri Üzerinde Yineleme

Harita öğeleri üzerinde yineleme yapabilirsiniz. Bunun için bir yineleyici oluşturup onu kullanmamız gerekiyor. Örneğin:

Örnek 1:

#include #include #include using namespace std;int main() {map Students;Students.insert(std::pair(200, "Alice"));Students.insert(std::pair(201, "John"));cout << "Map size is: " << Students.size() << endl;cout << endl << "Default map Order is: " << endl;for (map::iterator it = Students.begin(); it != Students.end(); ++it) {cout << (*it).first << ": " << (*it).second << endl;}}

Çıktı:

İşte kodun bir ekran görüntüsü:

Kod Açıklaması:

  1. İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
  2. İşlevlerini kullanmak için dize başlık dosyasını kodumuza dahil edin.
  3. İşlevlerini kullanmak için harita başlık dosyasını kodumuza ekleyin.
  4. Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza dahil edin.
  5. Main () işlevini çağırın. {, İşlev gövdesinin başlangıcını gösterir.
  6. Anahtarların tam sayı olacağı ve değerlerin dizeler olacağı Öğrenciler adlı bir harita oluşturun.
  7. Öğrenciler haritasına değerler ekleyin. Haritaya 200'lük bir anahtar ve Alice'in bir değeri eklenecektir.
  8. Öğrenciler haritasına değerler ekleyin. Haritaya 201 anahtarı ve John değeri eklenecektir.
  9. Öğrenciler adlı haritanın boyutunu almak için size () işlevini kullanın. Bu, 2 döndürmelidir.
  10. Konsolda biraz metin yazdırın.
  11. Öğrenciler adlı haritanın öğeleri üzerinde yinelemek üzere adlandırılmış bir yineleyici oluşturmak için bir for döngüsü kullanın.
  12. Konsola öğrenciler haritasının değerlerini yazdırın.
  13. For döngüsü gövdesinin sonu.
  14. Main () işlevinin gövdesinin sonu.

Std :: map'e veri eklemek

İnsert () işlevini kullanarak std :: map'e öğeler girebilirsiniz. Std :: map anahtarlarının benzersiz olması gerektiğini unutmayın.

Böylece önce her bir anahtarın haritada bulunup bulunmadığını kontrol eder. Varsa, giriş eklenmez, ancak mevcut giriş için yineleyiciyi döndürür. Mevcut değilse giriş eklenir.

İşlev aşağıdaki varyasyonlara sahiptir:

  • ekle (çift) - bu varyasyonla, haritaya bir anahtar / değer çifti eklenir.
  • insert (start_itr, end_itr) - bu varyasyonla, girişler başka bir haritadan start_itr ve end_itr ile tanımlanan aralık içinde eklenecektir.

İnsert_or_assing () fonksiyonu insert () fonksiyonu ile aynı şekilde çalışır, ancak verilen anahtar zaten haritasında varsa, değeri değiştirilmiş olacaktır.

Örnek 2:

#include #include using namespace std;int main() {map 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 bir ekran görüntüsü:

Kod Açıklaması:

  1. İşlevlerini kullanmak için harita başlık dosyasını kodumuza ekleyin.
  2. İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
  3. Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza dahil edin.
  4. Main () işlevini çağırın. {, İşlev gövdesinin başlangıcını gösterir.
  5. Anahtarların tam sayı olacağı ve değerlerin tamsayı olacağı m adında bir harita oluşturun. Haritaya üç giriş yapıldı.
  6. Haritaya yeni bir giriş ekleyin m. Haritaya 5 anahtarı ve 6 değeri eklenecektir.
  7. Zaten var olan bir anahtara giriş yapmaya çalışıyorum. 1 anahtarı haritada zaten mevcut olduğundan, giriş yapılmayacaktır.
  8. Mevcut bir girişi eklemek veya değiştirmek için insert_or_assign () işlevini kullanma. Anahtar 1 zaten mevcut olduğundan, değeri 6 olarak değiştirilecektir.
  9. Konsolda biraz metin yazdırın. "\ T" karakteri yatay bir boşluk oluştururken "\ n" karakteri fare imlecini sonraki satıra taşır.
  10. M adlı haritanın öğeleri üzerinde yineleme yapmak için itr adında bir yineleyici oluşturmak için bir for döngüsü kullanın.
  11. Konsolda harita m değerlerini yazdırın. "\ T" karakteri, her anahtar ile karşılık gelen değeri arasında yatay bir boşluk oluşturur. Buna karşılık, "\ n" karakteri her yinelemeden sonra fare imlecini bir sonraki satıra taşır.
  12. Bir döngü için gövdesinin sonu.
  13. Program başarılı bir şekilde tamamlandığında değer döndürmelidir.
  14. Main () işlevinin gövdesinin sonu.

Bir Haritada Arama

Bir haritadaki öğeleri tuşlarıyla aramak için find () işlevini kullanabiliriz. Anahtar bulunamazsa, işlev std :: map :: end döndürür. Aksi takdirde, aranan öğenin bir yineleyicisi döndürülür.

Örnek 2:

#include #include #include using namespace std;int main() {map Students;Students.insert(std::pair(200, "Alice"));Students.insert(std::pair(201, "John"));std::map::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 bir ekran görüntüsü:

Kod Açıklaması:

  1. Hata almadan işlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
  2. Hata almadan işlevlerini kullanmak için dize başlık dosyasını kodumuza ekleyin.
  3. Hata almadan işlevlerini kullanmak için harita başlık dosyasını kodumuza ekleyin.
  4. Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza dahil edin.
  5. Main () işlevini çağırın. {, Main () işlevinin gövdesinin başlangıcını gösterir.
  6. Anahtarları tamsayılar ve değerler dizeleri olacak Öğrenciler adında bir harita oluşturun.
  7. Öğrenciler haritasına değerler ekleyin. Haritaya 200'lük bir anahtar ve Alice'in bir değeri eklenecektir.
  8. Öğrenciler haritasına değerler ekleyin. Haritaya 201 anahtarı ve John değeri eklenecektir.
  9. 201 anahtarıyla ilişkili değeri arayın.
  10. Anahtarın değerinin bulunup bulunmadığını kontrol etmek için bir if ifadesi kullanın.
  11. Konsolda bazı metinlerin yanında anahtarın değerini yazdırın.
  12. İf ifadesinin gövdesinin sonu.
  13. Main () işlevinin gövdesinin sonu.

Bir Haritadan Veri Silme

Bir haritadan bir değeri silmek için silme () işlevini kullanabiliriz. Silinecek öğeye işaret eden bir yineleyici oluşturuyoruz. Yineleyici daha sonra silme () işlevine aktarılır.

Örnek 3:

#include #include #include using namespace std;int main() {map my_map;my_map.insert(std::make_pair("cow", 1));my_map.insert(std::make_pair("cat", 2));my_map["lion"] = 3;map::iterator it = my_map.find("cat");my_map.erase(it);for (map::iterator it = my_map.begin(); it != my_map.end(); ++it)cout << (*it).first << ": " << (*it).second << endl;return 0;}

Çıktı:

İşte kodun bir ekran görüntüsü:

Kod Açıklaması:

  1. İşlevlerini kullanmak için iostream başlık dosyasını kodumuza ekleyin.
  2. İşlevlerini kullanmak için dize başlık dosyasını kodumuza dahil edin.
  3. İşlevlerini kullanmak için harita başlık dosyasını kodumuza ekleyin.
  4. Sınıflarını çağırmadan kullanmak için std ad alanını kodumuza dahil edin.
  5. Main () işlevini çağırın. {, Main () işlevinin gövdesinin başlangıcını gösterir.
  6. Anahtarları dizeler ve değerler tamsayılar olacak my_map adında bir harita oluşturun.
  7. My_map haritasına değerler ekleyin. Haritaya bir İnek anahtarı ve 1 değeri eklenecektir.
  8. My_map haritasına değerler ekleyin. Haritaya bir Cat anahtarı ve 2 değeri eklenecektir.
  9. My_map haritasına aslan anahtarıyla 3 değerini ekleyin.
  10. My_map harita üzerinde anahtar kediyi aramak için yinelemek için bir yineleyici oluşturun.
  11. Yineleyici tarafından gösterilen öğeyi silin.
  12. My_map haritasının öğelerini baştan sona yinelemek için bir yineleyici kullanın.
  13. Konsoldaki my_map haritasının içeriğini yazdırın.
  14. Program başarıyla tamamlandıktan sonra çıktı vermelidir.
  15. Main () işlevinin gövdesinin sonu.

Özet:

  • Bir harita, öğeleri eşlenmiş bir biçimde depolayan ilişkilendirilebilir bir kapsayıcıdır.
  • Haritadaki her öğenin bir anahtar değeri ve eşlenmiş bir değeri vardır.
  • Bir haritada, iki eşlenmiş değer anahtar değerlerini 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 ++ haritası, benzersiz anahtarları sıralı bir şekilde depolar.
  • C ++ haritası ile çalışmak için, öğeler üzerinde yinelemek üzere bir yineleyici oluşturuyoruz.
  • Yineleyici ile haritadaki öğeleri arama ve silme gibi görevleri gerçekleştirebiliriz.