Assotsiativ konteynerlar haqida; set va multiset sinflari; map va multimap siflari




Download 2.03 Mb.
bet3/4
Sana16.06.2022
Hajmi2.03 Mb.
#23803
1   2   3   4
Bog'liq
3-ma\'ruza. Assotsiativ va tartiblanmagan konteynerlar
science-subject-for-elementary-3rd-grade-the-water-cycle
Masalaning qo’yilishi:
set va multiset asosida yaratilgan to’plam elementlarini set va mutiset ning maxsus funksiyalari yordamida qayta ishlash.
Masala:
Berilgan int turidagi to’plam qiymatlari 2- to’plamda nechta marta qatnashganligini aniqlovchi va ularni ekranga chiqaruvchi dastur tuzing. Ikkala to’plamdan ham bir xil qiymatli elemetlar o’chirilib Saralangan to’plam hosil qilinsin hamda uning qiymatlari ekranga chiqarilsin.
Masalani yechish goyasi: set konteyneri to’plami yaratiladi. list ning insert() iteratoridan foydalanib, A to’plamga qiymatlar o’zlashtiriladi. Z to’plamga esa A to’plam qiymatlarini juftlari yoziladi.
Dastur matni:

  1. #include "stdafx.h"

  2. #include

  3. #include

  4. #include

  5. #include

  6. using namespace System;

  7. using namespace std;

  8. int main()

  9. { srand(time(NULL));

  10. set<int> s; int n;

  11. cout<<"Elementlar sonini: "; cin>>n;

  12. multiset<int> M, M2;

  13. for (int i = 0; i < n; i++)

  14. { int j = rand()%n+n; M.insert(j);

  15. j = rand()%n+n; M2.insert(j);

  16. }

  17. auto k2 = M.begin();

  18. set<int> s2;

  19. for (int i = 0; i < n; i++)

  20. {

  21. s2.insert(*k2); k2++;

  22. }

  23. cout<"M to'plam elementlari:"<

  24. for (auto i=M.begin(); i!=M.end(); i++)

  25. {

  26. cout<<*i<<" ";

  27. }

  28. cout<

  29. cout<"M2 to'plam elementlari:"<

  30. for (auto i=M2.begin(); i!=M2.end(); i++)

  31. {

  32. cout<<*i<<" ";

  33. }

  34. cout<"M1 ning elementlari M2 to'plamda qatnashganlari soni:"<

  35. int soni=0;

  36. for (auto i=s2.begin(); i!=s2.end(); i++)

  37. {

  38. for (auto j=M2.begin(); j!=M2.end(); j++)

  39. {

  40. if(M2.count(*i)){

  41. if(*i==*j) {soni++; }

  42. }

  43. }

  44. if(soni>0)cout<<*i<<" -"<" marta "<

  45. else {cout<<*i<<" - qatnashmagan "<

  46. soni = 0;

  47. }

  48. //cout<

  49. auto k = M.begin();

  50. auto l = M2.begin();

  51. for (int i = 0; i < n; i++)

  52. {

  53. s.insert(*k);k++;

  54. s.insert(*l); l++;

  55. }

  56. cout<

  57. cout<"Saralangan to'plam elementlari:"<

  58. for (auto i=s.begin(); i!=s.end(); i++)

  59. {

  60. cout<<*i<<" ";

  61. }

  62. getchar(); getchar();

  63. return 0;

  64. }

Dastur natijasi:

Elementlar sonini: 25

M to'plam elementlari:


25 27 27 27 27 28 29 30 31 31 31 32 33 33 35 35 37 37 40 42 42 43 43 47 48

M2 to'plam elementlari:


26 27 30 31 31 31 31 34 35 37 38 39 42 43 45 45 45 46 46 46 46 47 47 49 49

M1 ning elementlari M2 to'plamda qatnashganlari soni:


25 - qatnashmagan
27 -1 marta
28 - qatnashmagan
29 - qatnashmagan
30 -1 marta
31 -4 marta
32 - qatnashmagan
33 - qatnashmagan
35 -1 marta
37 -1 marta
40 - qatnashmagan
42 -1 marta
43 -1 marta
47 -2 marta
48 - qatnashmagan
Saralangan to'plam elementlari:
25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 42 43 45 46 47 48 49

map sinfi
map va multimap - konteyner sinf shablonlarini va ularning yordamchi shablonlarini belgilaydi.
<map> kutubxonasi, shuningdek #include direktivasidan foydalanadi.

map va multimap uchun quyidagi operatorlar qayta yuklangan:


map sinfi uchun qayta yuklanga operatorlar
map sinfi:
Har bir element ma'lumotlar qiymati va saralash kalitiga ega bo'lgan to'plamdan ma'lumotlarni saqlash va olish uchun ishlatiladi. Kalit qiymati noyobdir va ma'lumotlarni avtomatik saralash uchun ishlatiladi.
map da elementning qiymati to'g'ridan-to'g'ri o'zgartirilishi mumkin. Kalit qiymati doimiy bo'lib, uni o'zgartirib bo'lmaydi. Buning o'rniga eski elementlar bilan bog'liq bo'lgan kalit qiymatlarni o’chirish va yangi elementlarga yangi kalit qiymatlarini kiritish kerak.
map sinfining sintaksisi:
template
class Type,
class Traits = less,
class Allocator=allocator

>> class map;
map sinfining turlari va funksiyalari
map sinfining turlari va funksiyalari set sinfiniki bilan bir xil faqat ulardan foydalanish usullarida farq qilinishi mumkin.
value_type turi va at(), insert() funksiyalari:


const_iterator turi va erase () funksiysi:


typedef pair turi va begin() funksiysi:


typedef pair turi va count() funksiysi:

difference_type turi:


Iteratorlar tomonidan ko'rsatilgan elementlar orasidagi diapazonda map ning elementlar sonini ifodalash uchun ishlatilishi mumkin bo'lgan imzolangan butun son.
farq_type - bu konteyner iteratorlari yordamida kamaytirish yoki ko'paytirish orqali qaytariladigan tur. differ_type odatda birinchi va oxirgi iteratorlar orasidagi [firs, last] oralig'idagi elementlar sonini ifodalash uchun ishlatiladi.
map va multimap sinflaridan foydalanib, amaliy dasturlar yaratish


Ishning maqsadi: C++ dasturlash tilida map va mulmap sinflari va uning metodlaridan foydalanish ko’nikmalarini egallsh.
Masalaning qo’yilishi:
map va multimap asosida yaratilgan to’plam elementlarini map va mutimap ning maxsus funksiyalari yordamida qayta ishlash.
Masala:
Talabalarning haqida (familiya, ismi va stipendiyasi) string va float turidagi to’plam berilgan. Familiyasi yoki ismi to’liq yozilganlar va stipendiyasi N ga teng bo’lganlaridan 2- to’plamni hosil qiluvchi va ularni ekranga chiqaruvchi dastur tuzing.
Masalani yechish goyasi:
map konteyneri to’plami yaratiladi. map ning insert(pair('a',10)) iteratoridan foydalanib, A to’plamga qiymatlar o’zlashtiriladi.
Dastur matni:

  1. #include "stdafx.h"

  2. #include

  3. #include

  4. #include

  5. using namespace System;

  6. using namespace std;

  7. int main()

  8. { map<string, int> s; int n;

  9. cout<<"Talabalar sonini kiriting: "; cin>>n; cin.ignore();

  10. multimap<string,int> M, M2;

  11. for (int i = 0; i < n; i++)

  12. { string St;

  13. int step;

  14. cout<" - talaba ma'lumotlarini kiriting:"<

  15. cout<<"Fam, ismi: "; getline(cin,St);

  16. cout<<"Stipendiyasi: "; cin>>step; cin.ignore();

  17. s.insert(pair<string, int>(St,step));

  18. M.insert(pair<string, int>(St,step));

  19. }

  20. string S;

  21. int N;

  22. cout<<"Qanday stipendiya oladigan talaba haqida ma'lumot kerak?: ";

  23. cin>>N;

  24. int k=0;

  25. for (auto it = M.begin(); it != M.end(); ++it){

  26. S = it->first;

  27. if(S.find(" ")second == N){

  28. M2.insert(pair<string, int>(S,N)); cout<<"bor"<

  29. }

  30. cout<<"So'rov Natijasi:"<

  31. for (auto it = M2.begin(); it != M2.end(); ++it){

  32. cout<first<<" "<second<

  33. }

  34. getchar(); getchar();

  35. return 0;}

Dastur natijasi:

Talabalar sonini kiriting: 3
1 - talaba ma'lumotlarini kiriting:
Fam, ismi: Mallayev Oybek
Stipendiyasi: 400000
2 - talaba ma'lumotlarini kiriting:
Fam, ismi: Ishniyazov Odil
Stipendiyasi: 500000
3 - talaba ma'lumotlarini kiriting:
Fam, ismi: ABdurahmonov
Stipendiyasi: 300000
Qanday stipendiya oladigan talaba haqida ma'lumot kerak?: 400000
bor
So'rov Natijasi:
Mallayev Oybek 400000



4. Tartiblanmagan assotsiativ konteynerlar
Tartibga solinmagan assotsiativ konteynerlar tezda qidirish qobiliyatiga ega (buzilgan) ma'lumotlar tuzilmalarini (o'rtacha murakkabligi O (1), eng yomon holatda O (n)) tashkil etadi.
unordered_set (C++11) - Noyob kalitlar, xash-kalitlar to'plami.
unordered_map(C++11) - Kalit-qiymat juftlari to'plami, to'ldirilgan kalitlar, kalitlar noyobdir.
unordered_multiset(C++11) - Kalitlar to'plami, hash-kalitlar.
unordered_multimap(C++11) -
unordered_set sinfi:

  • Snf shabloni:

template< class Key, class Hash = std::hash,
class KeyEqual = std::equal_to,
class Allocator = std::allocator> class unordered_set;

Tartiblanmagan to'plam bu ko'p turdagi noyob obyektlarni o'z ichiga olgan assotsiativ konteynerdir. Qidiruv, qo'shish va o'chirish o'rtacha doimiy vaqt murakkabligiga ega.


unordered_set iteratorlari:

Nomi

Izoh

begin, cbegin

Birinchi elementga iteratorni qaytaradi.

end, cend

Iteratorni oxirgi elementga qaytaradi.

empty

Konteynerni bo’shlikka tekshirish.

size

Konteynerning elementlar sonini qaytaradi.

max_size

Konteynerning ruxsat etilgan elementlarning maksimal sonini qaytaradi.




Download 2.03 Mb.
1   2   3   4




Download 2.03 Mb.

Bosh sahifa
Aloqalar

    Bosh sahifa



Assotsiativ konteynerlar haqida; set va multiset sinflari; map va multimap siflari

Download 2.03 Mb.