C++ map’lar
C++ map
Map elementlarni "kalit/qiymat" juftliklarida saqlaydi.
Map’dagi elementlar:
- Kalitlar orqali (indeks orqali emas) murojaat qilinadi va har bir kalit noyob bo‘ladi.
- Kalitlari bo‘yicha avtomatik ravishda o‘sish tartibida saralanadi.
Map’dan foydalanish uchun <map> sarlavha faylini qo‘shishingiz kerak:
// Include the map library
#include <map>
Map yaratish
Map yaratish uchun map kalit so‘zidan foydalaning va burchakli qavslar <> ichida u saqlaydigan kalit va qiymatning tipini ko‘rsating. Oxirida map nomini ko‘rsating, masalan: map<keytype,
valuetype>
mapName:
Misol
// Create a map called people that will store strings as keys and integers as values
map<string, int> people
Agar e’lon qilish paytida elementlar qo‘shmoqchi bo‘lsangiz, ularni jingalak qavslar {} ichida vergul bilan ajratib yozing:
Misol
// Create a map that will store the name and age of different people
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
Map elementlariga murojaat qilish
Massivlar va vektorlardagidek map elementlariga indeks raqamlari orqali murojaat qilib bo‘lmaydi.
Buning o‘rniga map elementiga kvadrat qavslar [] ichida uning kalitini ko‘rsatib murojaat qilishingiz mumkin:
Misol
// Create a map that will store the name and age of different people
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
// Get the value associated with the key "John"
cout << "John is: " << people["John"] << "\n";
// Get the value associated with the key "Adele"
cout << "Adele is: " << people["Adele"] << "\n";
O‘zingiz sinab ko‘ring »
Elementlarga .at() funksiyasi yordamida ham murojaat qilishingiz mumkin:
Misol
// Create a map that will store the name and age of different people
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
// Get the value associated with the key "Adele"
cout << "Adele is: " << people.at("Adele") << "\n";
// Get the value associated with the key "Bo"
cout << "Bo is: " << people.at("Bo") << "\n";
O‘zingiz sinab ko‘ring »
Eslatma: Ko‘pincha kvadrat qavslar [] o‘rniga .at() funksiyasi afzal ko‘riladi, chunki element mavjud bo‘lmasa, u xato xabarini chiqaradi:
Misol
// Create a map that will store the name and age of different people
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
// Try to access an element that does not exist (will throw an exception)
cout << people.at("Jenny");
O‘zingiz sinab ko‘ring »
Qiymatlarni o‘zgartirish
Kalitga bog‘langan qiymatni o‘zgartirishingiz ham mumkin:
Misol
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
// Change John's value to 50 instead of 32
people["John"] = 50;
cout << "John is: " << people["John"]; // Now outputs John is: 50
O‘zingiz sinab ko‘ring »
Biroq .at() funksiyasidan foydalanish xavfsizroq:
Misol
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
// Change John's value to 50 instead of 32
people.at("John") = 50;
cout << "John is: " << people.at("John"); // Now outputs John is: 50
O‘zingiz sinab ko‘ring »
Element qo‘shish
Map’ga element qo‘shish uchun kvadrat qavslardan [] foydalanish mumkin:
Misol
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
// Add new elements
people["Jenny"] = 22;
people["Liam"] = 24;
people["Kasper"] = 20;
people["Anja"] = 30;
O‘zingiz sinab ko‘ring »
Lekin .insert() funksiyasidan ham foydalanishingiz mumkin:
Misol
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
// Add new elements
people.insert({"Jenny", 22});
people.insert({"Liam", 24});
people.insert({"Kasper", 20});
people.insert({"Anja", 30});
O‘zingiz sinab ko‘ring »
Kalitlari teng elementlar
Map’da kalitlari teng elementlar bo‘lishi mumkin emas.
Masalan, map’ga "Jenny" kalitini ikki marta qo‘shishga harakat qilsak, faqat birinchisi saqlanib qoladi:
Misol
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
// Trying to add two elements with equal keys
people.insert({"Jenny", 22});
people.insert({"Jenny", 30});
O‘zingiz sinab ko‘ring »
Xulosa qilib aytganda: qiymatlar teng bo‘lishi mumkin, lekin kalitlar noyob bo‘lishi shart.
Elementlarni olib tashlash
Map’dan muayyan elementlarni olib tashlash uchun .erase() funksiyasidan foydalanishingiz mumkin:
Misol
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
// Remove an element by key
people.erase("John");
O‘zingiz sinab ko‘ring »
Map’dan barcha elementlarni olib tashlash uchun .clear() funksiyasidan foydalanishingiz mumkin:
Misol
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
// Remove all elements
people.clear();
Map o‘lchamini aniqlash
Map’da nechta element borligini bilish uchun .size() funksiyasidan foydalaning:
Misol
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
cout << people.size(); // Outputs 3
O‘zingiz sinab ko‘ring »
Map bo‘shligini tekshirish
Map bo‘sh yoki bo‘sh emasligini aniqlash uchun .empty() funksiyasidan foydalaning.
.empty() funksiyasi map bo‘sh bo‘lsa
1 (true), aks holda 0 (false) qaytaradi:
Misol
map<string, int> people;
cout << people.empty(); // Outputs 1 (The map is empty)
O‘zingiz sinab ko‘ring »
Misol
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
cout << people.empty(); // Outputs 0 (not empty)
O‘zingiz sinab ko‘ring »
Eslatma: .count(key) funksiyasi yordamida muayyan element mavjudligini ham tekshirishingiz mumkin.
U element mavjud bo‘lsa
1 (true), aks holda 0 (false) qaytaradi:
Misol
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
cout << people.count("John"); // Outputs 1 (John exists)
O‘zingiz sinab ko‘ring »
Map bo‘ylab sikl
Map bo‘ylab for-each sikli yordamida aylanib chiqishingiz mumkin. Biroq bunda bir-ikki narsani bilib qo‘yish kerak:
forsikli ichidaautokalit so‘zidan (C++ 11-versiyasida kiritilgan) foydalanishingiz kerak. Bu kompilyatorga har bir kalit-qiymat juftligi uchun to‘g‘ri ma’lumot tipini avtomatik aniqlash imkonini beradi.- Map elementlari ham kalitlardan, ham qiymatlardan iborat bo‘lgani uchun sikl ichida kalitlarga murojaat qilish uchun
.first, qiymatlarga murojaat qilish uchun esa.secondyozishingiz kerak. - Map’dagi elementlar kalitlari bo‘yicha avtomatik ravishda o‘sish tartibida saralanadi:
Misol
map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
for (auto person : people) {
cout << person.first << " is: " << person.second << "\n";
}
Natija quyidagicha bo‘ladi:
Adele is: 45
Bo is: 29
John is: 32
Agar tartibni teskarisiga o‘zgartirmoqchi bo‘lsangiz, burchakli qavslar ichida greater<type> funktoridan quyidagicha foydalanishingiz mumkin:
Misol
map<string, int, greater<string>> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };
for (auto person : people) {
cout << person.first << " is: " << person.second << "\n";
}
Natija quyidagicha bo‘ladi:
John is: 32
Bo is: 29
Adele is: 45
Maslahat: Map’lar bo‘ylab iterator yordamida ham aylanib chiqish mumkin, bu haqda keyingi bobda batafsil bilib olasiz.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
