3- ma’ruza: Assotsiativ va tartiblanmagan konteynerlar Reja: Assotsiativ konteynerlar haqida; set va multiset sinflari



Yüklə 1,16 Mb.
Pdf görüntüsü
səhifə8/11
tarix10.05.2023
ölçüsü1,16 Mb.
#110487
1   2   3   4   5   6   7   8   9   10   11
Assotsiativ konteynerlar haqida; set va multiset sinflari; map v

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. 
unordered_set ning funksiya – a’zolari: 
Nomi 
Izoh 
at 
Ko'rsatilgan elementga indeks tekshiruvi bilan kirishni 
ta'minlaydi 
operator[] 
Belgilangan elementga kirishni ta'minlaydi 
front 
Birinchi elementga kirishni ta'minlaydi 
back 
oxirgi elementga kirishni ta'minlaydi 
data (C++11)  
Massivning birinchi haqiqiy elementiga ko'rsatgichni qaytaradi 
unordered_set ning funksiya – a’zolari 
Nomi 
Izoh 
get_allocator 
Bog'langan ajratuvchini qaytaradi. 
operator= 
Konteynerdagi qiymatlarni o'rnatadi 

Yüklə 1,16 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9   10   11




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin