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 g‘
oyasi:
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
Dostları ilə paylaş: