C++ std::set (Noyob to'plam)
To'plamlar STL containers bo'lib, ular bir xil turdagi noyob elementlarni tartiblangan holda saqlaydi.
To'plamdagi har bir elementning qiymati noyob bo'lganligi sababli, qiymatning o'zi elementni aniqlash uchun kalit bo'lib xizmat qiladi.
C++ to'plami quyidagi xususiyatlarga ega.
To'plamdagi ikkita element teng bo'lishi mumkin emas.
Biz to‘plamga elementlar qo‘shishimiz yoki olib tashlashimiz mumkin, lekin mavjud elementlarning qiymatlarini o‘zgartira olmaymiz.
To'plamdagi elementlar ma'lum bir qat'iy zaif tartib bo'yicha saralanadi.
Odatiy bo'lib, C++ to'plamlari o'sish tartibida tartiblangan, ammo bizda buni o'zgartirish imkoniyati mavjud.
To‘plam elementlariga konteynerdagi joylashuvi bo‘yicha emas, balki kalit yordamida havola qilinadi.
Bu arrays dan farq qiladi, bu erda elementlarga indekslar yordamida kirish mumkin.
C++ da to‘plamni amalga oshirish uchun dasturimizga <set> sarlavha faylini kiritishimiz kerak.
#include <set>
Biz C++ da quyidagi sintaksis yordamida to'plam yaratishimiz mumkin:
// to'plamini e'lon qiladi
std::set<data_type> set_name = {key1, key2, key3, ...};
Bu yerga,
std::set - declares an STL container of type set.
-<data_type> - to'plamda saqlanadigan qiymatlarning data type .
-set_name - to'plamga berilgan noyob nom.
-key1, key2, key3, ... - to'plamda saqlanadigan kalit/qiymat.Masalan,
// elementlar bilan to'plamni ishga tushirish
std::set<int> my_set1 = {5, 3, 8, 1, 3};
// bo'sh to'plam yarating
std::set<int> my_set2;
[!NOTE] Oldinga qarab, biz
stdnamespace dan foydalanamiz, shuning uchunstd::ni sintaksisimizdan chiqarib tashlashimiz mumkin.
#include <iostream>
#include <set>
using namespace std;
int main() {
set<int> my_set = {5, 3, 8, 1, 3};
for(int val : my_set) {
cout << val << " ";
}
return 0;
}
Chiqish
1 3 5 8
Bu erda biz int tipidagi to'plamni yaratdik.
Ko'rib turganingizdek, to'plam qiymatlarni tartiblangan tarzda qaytardi va 3 ning takroriy nusxasini e'tiborsiz qoldirdi.
[!NOTE] To‘plamga elementlar qo‘shish uchun
[]operator dan foydalana olmaymiz. Bu xatoga olib keladi.// my_set [4] = 4 to'plamida bunga ruxsat berilmaydi
To'plam elementlarini kamayish tartibida tartiblash uchun biz sintaksisimizni quyidagicha o'zgartirishimiz mumkin:
set<int, greater<int>> my_set;
Masalan,
#include <iostream>
#include <set>
using namespace std;
int main() {
set<int, greater<int>> my_set = {5, 3, 8, 1, 3};
for(int val : my_set) {
cout << val << " ";
}
return 0;
}
Chiqish
8 5 3 1
Chiqishdan ko'rinib turibdiki, to'plam endi kamayish tartibida tartiblangan elementlarni qaytaradi.
C++ tilida set klassi to'plamda turli operatsiyalarni bajarish uchun turli usullarni taqdim etadi.
Amaliyot tavsifi insert() Elementlarni to‘plamga joylashtiring. erase() To‘plamdan elementlarni o‘chirish. clear() To'plamdan barcha elementlarni olib tashlang. empty() To'plam bo'sh yoki yo'qligini tekshiring. size() To'plam hajmini qaytaradi.
#include <iostream>
#include <set>
using namespace std;
int main () {
set<int> my_set;
// to'plamga qiymatlarni qo'shing
my_set.insert(10);
my_set.insert(30);
my_set.insert(20);
my_set.insert(50);
my_set.insert(40);
my_set.insert(50);
// to'plam elementlarini chop eting
for (int i : my_set) {
cout << i << " ";
}
return 0;
}
Chiqish
10 20 30 40 50
Bu erda biz int tipidagi bo'sh my_set to'plamini yaratdik va unga insert() usuli yordamida qiymatlarni qo'shdik.
E'tibor bering, takroriy qo'shimchalar olib tashlanadi va qo'shish tartibi boshqacha bo'lishiga qaramay, to'plam o'sish tartibida tartiblanadi.
#include <iostream>
#include <set>
using namespace std;
int main () {
set<int> my_set;
// to'plamga qiymatlarni qo'shing
my_set.insert(10);
my_set.insert(30);
my_set.insert(20);
my_set.insert(50);
my_set.insert(40);
my_set.insert(50);
// 40 mavjudligini tekshiring
int num = 40;
if(my_set.count(num) == 1) {
cout << num << " exists." << endl;
} else {
cout << num << " doesn't exist." << endl;
}
// 60 mavjudligini tekshiring
num = 60;
if(my_set.count(num) == 1) {
cout << num << " exists." << endl;
} else {
cout << num << " doesn't exist." << endl;
}
return 0;
}
Chiqish
40 exists.
60 doesn't exist.
Bu erda biz int tipidagi bo'sh my_set to'plamini yaratdik va unga insert() usuli yordamida qiymatlarni qo'shdik.
my_set.count(num) tomonidan my_set to'plamida 40 va 60 soni 40 va 60 bo'lsa, biz tekshirdik.
my_set.count(num) returns 1 if num exists in my_set, otherwise it returns 0.
#include <iostream>
#include <set>
using namespace std;
int main () {
set<int> my_set = {10, 20, 30, 40};
// o'chirishdan oldin o'rnating
cout << "The set before deletion: ";
for (int i : my_set) {
cout << i << " ";
}
// to'plamdan qiymatlarni o'chirish
my_set.erase(10);
my_set.erase(20);
// o'chirishdan keyin o'rnatiladi
cout << "\nThe set after deletion: ";
for (int i : my_set) {
cout << i << " ";
}
// to'plamdan barcha elementlarni o'chiring
my_set.clear();
// barcha elementlarni tozalashdan keyin o'rnating
cout << "\nThe set after clearing all elements: ";
for (int i : my_set) {
cout << i << " ";
}
return 0;
}
Chiqish
The set before deletion: 10 20 30 40
The set after deletion: 30 40
The set after clearing all elements:
Bu erda biz alohida to'plam elementlarini o'chirish uchun erase() usulidan foydalandik.
Keyin, biz to'plamning barcha elementlarini o'chirish uchun clear() usulidan foydalandik.
C++ tilida empty() va size() usullari sig'im usullari deb ataladi.
empty() usuli qaytadi
Masalan,
#include <iostream>
#include <set>
using namespace std;
int main () {
set<int> my_set = {10, 20, 30};
// oldin o'rnating
cout << "The set before clear: ";
for (int i : my_set) {
cout << i << " ";
}
// to'plam bo'sh yoki yo'qligini tekshiring
cout << "\nEmpty: " << my_set.empty() << endl;
// to'plam hajmini tekshiring
cout << "Size: " << my_set.size() << endl;
// to'plamdan qiymatlarni aniqlang
my_set.clear();
// tozalagandan keyin o'rnating
cout << "\nThe set after clear: ";
for (int i : my_set) {
cout << i << " ";
}
// sig'im usullaridan yana foydalaning
cout << "\nEmpty: " << my_set.empty() << endl;
cout << "Size: " << my_set.size() << endl;
return 0;
}
Chiqish
The set before clear: 10 20 30
Empty: 0
Size: 3
The set after clear:
Empty: 1
Size: 0
Bu erda biz empty() va size() usullarini to'plam tarkibini tozalashdan oldin va keyin ishlatganmiz.
Tarkibni tozalashdan oldin:
-empty() 0 ni qaytaradi, bu to'plam bo'sh emasligini ko'rsatadi
-size() 3 ni qaytaradi, bu to'plamda uchta element mavjudligini ko'rsatadi
Tarkibni tozalagandan so'ng:
-empty() 1ni qaytaradi, bu to'plam bo'sh ekanligini ko'rsatadi
-size() 0 ni qaytaradi, bu to'plamda hech qanday element yo'qligini ko'rsatadi
Shuningdek oʻqing