logo

Ma’lumotlarning murakkab turlani tasvirlash va qayta ishlash

Загружено в:

23.11.2024

Скачано:

0

Размер:

429.041015625 KB
Ma’lumotlarning murakkab turlani tasvirlash va qayta ishlash 
MUNDARIJA
I. KIRISH ....................................................................................................................................................... 2
II. ASOSIY QISM ............................................................................................................................................ 4
1. Murakkab ma’lumotlar turlari nima? ................................................................................................... 4
2. Ma’lumotlarning murakkab turlari. Massivlar ..................................................................................... 4
3. Ko’rsatkichlar ....................................................................................................................................... 7
4. Strukturalar .......................................................................................................................................... 8
5. Ma’lumotlarni qayta ishlash uchun STL konteynerlari. Vectorlar. ..................................................... 12
6. STL ning map konteyneri .................................................................................................................... 16
III. XULOSA ................................................................................................................................................. 20
IV. FOYDALANILGAN ADABIYOTLAR ........................................................................................................... 21 I. KIRISH
C++ da murakkab ma'lumotlar turlari asosiy ma'lumotlar turlarini (masalan,
int yoki double) murakkab tuzilmalarga guruhlaydi. Ushbu tuzilmalar sizga asosiy
raqamlar yoki belgilar doirasidan tashqariga chiqadigan ma'lumotlarni ko'rsatish va
boshqarish   imkonini   beradi.   Quyida   C++   tilidagi   ba zi   asosiy   murakkabʼ
ma lumotlar turlarining taqsimoti keltirilgan:	
ʼ
 Massivlar:   massiv   bitta   nom   ostida   bir   xil   ma'lumotlar   turidagi   elementlar
to'plamini   saqlaydi.   Siz   alohida   elementlarga   massiv   ichidagi   indeksidan
foydalanib kirishingiz mumkin.
 Strukturalar   (strukturalar):   Struktura   turli   xil   ma'lumotlar   turlarining
o'zgaruvchilarini   bitta   nom   ostida   to'playdigan   foydalanuvchi   tomonidan
belgilangan   ma'lumotlar   turini   belgilaydi.   Bu   sizga   tegishli   ma'lumotlarni
birgalikda   guruhlash   va   yanada   mazmunli   ma'lumotlar   birliklarini   yaratish
imkonini beradi.
 Ko'rsatkichlar:   Ko'rsatkichlar   xotira   manzillarini   saqlaydi.   Ular   xotirada
boshqa   o'zgaruvchilarning   joylashuvini   saqlaydigan   o'zgaruvchilar   kabi   ishlaydi.
Bu ma'lumotlarga bilvosita kirish va manipulyatsiya qilish imkonini beradi.
 Ma'lumotnomalar:   Ma'lumotnomalar  asosan  mavjud o'zgaruvchilar  uchun
taxalluslardir.   Ular   nusxa   yaratmasdan   bir   xil   ma'lumotlarga   kirishning   boshqa
usulini taqdim etadi.
 Sanalgan   turlar   (enumlar):   Enumlar   nomli   butun   son   konstantalaridan
tashkil   topgan   foydalanuvchi   tomonidan   belgilangan   ma lumotlar   turlarini	
ʼ
belgilaydi. Ular xom raqamli qiymatlar o'rniga mazmunli nomlar yordamida kodni
o'qishni yaxshilaydi.
 Sinflar:  Sinflar tuzilmalarga o'xshaydi, lekin inkapsulyatsiya (ma'lumotlarni
yashirish) va meros (mavjud sinflar asosida yangi sinflar yaratish) kabi kuchliroq
xususiyatlarni   taklif   qiladi.   Ular   o'zlarining   ma'lumotlari   va   xatti-harakatlarini
boshqaradigan ob'ektlarni yaratish rejasini taqdim etadilar.
2  Birlashmalar   (kamroq):   Uyushmalar   bir   xil   xotira   joyida   turli   xil
ma'lumotlar   turlarini   saqlashga   imkon   beradi.   Biroq,   ittifoqning   faqat   bitta   a'zosi
istalgan vaqtda qiymatga ega bo'lishi mumkin.
Bundan   tashqari,   C++   standart   kutubxonasi   <complex> murakkab   raqamlar
bilan   ishlash   uchun   sarlavhani   taqdim   etadi.   Ushbu   sarlavha   haqiqiy   va   xayoliy
qismlarga ega murakkab raqamlarni ifodalovchi shablon sinfini belgilaydi , bu erda
T yoki kabi asosiy son turi bo'lishi mumkin . std::complex<T>floatdouble
Ushbu   murakkab   ma'lumotlar   turlarini   tushunish   va   ulardan   foydalanish
orqali siz murakkabroq ma'lumotlar tuzilmalarini boshqaradigan va har xil turdagi
ma'lumotlarni  manipulyatsiya  qilishni  talab  qiladigan  muammolarni   hal  qiladigan
C++ dasturlarini yaratishingiz mumkin.
3 II.  ASOSIY QISM
1. Murakkab ma’lumotlar turlari nima?
Murakkab   tiplar   -   bu   ibtidoiy   ma'lumotlar   turlaridan   tashkil   topgan   ichki
ma'lumotlar tuzilmalari. Ushbu ma'lumotlar tuzilmalari boshqa murakkab turlardan
ham   iborat   bo'lishi   mumkin.   Murakkab   turlarning   ba'zi   misollariga   struct   (satr),
massiv/ro'yxat, xarita va ittifoq kiradi.
Murakkab   turlar   Python,   C++   va   Java   kabi   ko'pgina   dasturlash   tillari
tomonidan qo'llab-quvvatlanadi. Ular, shuningdek, 8.0 da kompozit  (struct) turini
joriy etgan PostgreSQL kabi ma'lumotlar bazalari tomonidan qo'llab-quvvatlanadi.
Va   ular   Vertica-da   qo'llab-quvvatlanadi.   Biz   qo'shayotganimiz   bu   turlar
uchun yanada boyroq, to'liqroq qo'llab-quvvatlashdir,  bu nafaqat  ORC  va Parket-
da murakkab turlarni so'rash, balki faylni birinchi navbatda ancha kattaroq satr va
ustun formatiga o'zgartirmasdan tezda amalga oshirishdir.
Murakkab   ma'lumotlar   turlari   C++   dasturlashda   mustahkam   va   samarali
ilovalar yaratish uchun asosiy hisoblanadi.
Murakkab   ma’lumotlar   turlariga   yana   ma’lumotlarni   qayta   ishlash   C++
standart kutubxonasi tomonidan taqdim etilgan konteynerlar ya’ni STL konteylari
kiradi. STL konteynerlariga vector, list, set, map kabilar kiradi.
2. Ma’lumotlarning murakkab turlari. Massivlar
Agar   struktura   bir   hil   kattalikdagi   tiplardan   tuzilgan   bo'lsa,   uning   nomi
massiv (array)  deyiladi. Massivlar dasturlashda eng ko'p qo'laniladigan ma’lumot
tiplaridir.   Massivlar   hotirada   ketma-ket   joylashgan,   bir   tipdagi   o'zgaruvchilar
guruhidir.   Alohida   bir   o’zgaruvchini   ko’rsatish   uchun   massiv   nomi   va   kerakli
o’zgaruvchi   indeksini   yozamiz.   C/C++   dagi   massivlardagi   elementlar   indeksi   har
doim noldan boshlanadi. Bizda char tipidagi m nomli massiv bor bo'lsin va uning 4
dona elementi mavjud bo'lsin. Sxemada bunday ko’rsataylik: 
4 m[0] -> 4 
m[1] -> -44 
m[2] -> 109 
m[3] -> 23
Ko’rib   turganimizdek,   elementga   murojaat   qilish   uchun   massiv   nomi   va   []
qavslar   ichida   element   indeksi   yoziladi.   Bu   yerda   birinchi   element   qiymati   4,
ikkinchi   element   -   1   nomerli   indeksda   -44   qiymatlari   bor   ekan.   Ohirgi   element
indeksi  n-1 bo'ladi  (n - massiv  elementlari  soni). [] qavslar  ichidagi indeks butun
son yoki butun songa olib keluvchi ifoda bo'lmog'i lozim. 
Masalan: 
int k = 4, l = 2; 
m[ k-l ] = 77;                  // m[2] = 77 
m[3] *= 2;                     // m[3] = 46 
double d = m[0] * 6;     // d = 24 
cout << m[1];               // Ekranda: -44
Massivlarni   ishlatish   uchun   ularni   e’lon   qilish   va   kerak   bo'lsa   massiv
elementlarini   initsalizatsiya   qilish   kerak.   Massiv   e’lon   qilinganda   kompilyator
elementlar soniga teng hajmda hotira ajratadi. Masalan yuqorida qo’llanilgan char
tipidagi m massivini e’lon qilaylik. 
char m[4]; 
Bu   yerdagi   4   soni   massivdagi   elementlar   miqdorini   bildiradi.   Bir   necha
massivni e'londa bersak ham bo'ladi: 
int m1[4], m2[99], k, l = 0; 
Massiv elementlari dastur davomida initsalizatsiya qilishimiz mumkin, yoki
boshlang’ich   qiymatlarni   e’lon   vaqtida,   {}   qavslar   ichida   ham   bersak   bo’ladi.   {}
qavslardagagi qiymatlar massiv initsalizaytsiya ro’yhati deyiladi. 
int n[5] = {3, 5, -33, 5, 90}; 
Yuqorida birinchi elementning qiymati 3, ikkinchiniki 5 ... ohirgi beshinchi
element qiymati esa 90 bo’ldi.
5 {}   qavslar   ichida   esa   faqat   boshlangich   uchta   element   qiymatlari   berildi.
Bunday holda, qolgan elementlar avtomatik tarzda nolga tenglashtiriladi. Bu yerda
aytib   o'tishimiz   kerakki,   {}   qavslar   ichida   berilgan   boshlangish   qiymatlar   soni
massivdagi elementlar sonidan katta bo'lsa, sintaksis hatosi vujudga keladi. 
Masalan: 
char k[3] = {3, 4, 6, -66, 34, 90};      // Hato! 
Uch   elementdan   iborat   massivga   6   dona   boshlangich   qiymat   berilyapti,   bu
hatodir. Boshqa misolni ko'rib chiqaylik: 
int w[] = {3, 7, 90, 78}; 
w nomli massiv e’lon qilindi, lekin [] qavslar ichida massivdagi  elementlar
soni   berilmadi.   Bunday   holda   necha   elementga   joy   ajratishni   kompilyator   {}
qavslar ichidagi boshlangich qiymatlar miqdoriga qarab biladi. Demak, yuqoridagi
misolda   w   massivimiz   4   dona   elementdan   iborat   bo'ladi.   E’lon   davridagi   massiv
initsalizatsiya   ro'yhati   dastur   ijrosi   vaqtidagi   initsalizatsiyadan   ko'ra   tezroq
ishlaydigan mashina kodini vujudga keltiradi. Bir misol keltiraylik. 
#include <iostream> 
#include <iomanip>
const int massiv = 8; // massiv kattaligi uchun konstanta 
int k[massiv]; 
char c[massiv] = {5,7,8,9,3,44,-33,0}; // massiv initsalizatsiya ro'yhati 
int main(){ 
for (int i = 0; i < massiv; i++) { 
k[i] = i + 1; // dastur ichida inisalizatsiya 
} 
for (int j = 0; j < massiv; j++) { 
cout << k[j] << setw(4) << c[j] << endl; 
} 
return (0);
}
6 3. Ko’rsatkichlar
O'zining   qiymati   sifatida   xotira   manziliini   ko'rsatuvchi   (saqlovchi)
o'zgaruvchilarga   - ko'rsatkich o'zgaruvchilar   deyiladi.
Masalan :  Ko'rsatkich. Ko'rsatkichning qiymati
o 0 x 2 2 f f 4 0
o 0 x 2 2 f f 3 3
o v a   x a k a z o   k a b i   x o t i r a n i n g   a n i q   q i s m i   b o ' l i s h i   m u m k i n .
Boshqa o'zgaruvchilar kabi, ko'rsatkichlardan foydalanish uchun ularni e'lon
qilish, toifasini aniqlash shart.
Sintaksis  : ma'lumotlar turi *var_name;
Masalan,   int   *   ptr   ; //ptr  int ma'lumotlarini saqlaydigan manzilga ishora qiladi.
Bu yerda ptr -   int toifasidagi ob'ektga ko'rsatkich, count esa oddiy butun (int)
toifasidagi o'zgaruvchi. Ko'rsatkichlarni e'lon qilishda har bir o'zgaruvchi oldigan *
qo'yilishi shart.
Maslahat:   Ko'rsatkich o'zgaruvchilarini e'lon qilishning uchta usuli mavjud,
ammo birinchi usul afzal ko'riladi:
string* mystring;
string *mystring;
string * mystring;
* operator   (   dereference   operatori)   yordamida   o'zgaruvchining   qiymatini
olish uchun ko'rsatgichdan foydalanishingiz mumkin   :
#include <iostream>
#include <string>
using namespace std;
int main() {
    string food = "Palov";   
    string* ptr = &food;       
    cout << ptr << "\n";
7     cout << *ptr << "\n";
    return 0;
}
C++   da   ko'rsatgichlar   va   havolalar   ikkalasi   ham   xotira,   xotira   manzili   va
dasturdagi   ma'lumotlar   bilan   ishlash   uchun   ishlatiladigan   mexanizmlardir.
Ko'rsatkichlar boshqa o'zgaruvchining xotira manzilini saqlash uchun ishlatiladi,
havolalar esa allaqachon mavjud o'zgaruvchiga taxallus yaratish uchun ishlatiladi.
4. Strukturalar
Massivlardan   farqli   o'laroq,   C++   tilidagi   tuzilmalar   o'xshash   bo'lmagan
ma'lumotlar   turlarining   elementlari   guruhini   saqlash   uchun   foydalaniladigan
foydalanuvchi tomonidan belgilangan ma'lumotlar turlaridir.
Struktura   -   bu   C/C++   da   foydalanuvchi   tomonidan   belgilangan
ma'lumotlar turi. Tuzilma har xil turdagi elementlarni bitta turga guruhlash uchun
ishlatilishi mumkin bo'lgan ma'lumotlar turini yaratadi.
1-rasm.
8 Strukturani   yaratish   uchun   "struct"   kalit   so'zi   ishlatiladi.   Strukturani
yaratishning umumiy sintaksisi quyida ko'rsatilgan:
2-rasm. 
C++ tilidagi tuzilmalar ikki turdagi a'zolarni o'z ichiga olishi mumkin:    
 Ma'lumotlar   a'zosi   :   Bu   a'zolar   oddiy   C++   o'zgaruvchilari.   Biz   C++   da   har
xil   turdagi   ma'lumotlarning   o'zgaruvchilari   bilan   tuzilma   yaratishimiz
mumkin.
 A'zo   funktsiyalari   :   Bu   a'zolar   oddiy   C++   funksiyalaridir.   O'zgaruvchilar
bilan   bir   qatorda   biz   tuzilma   deklaratsiyasiga   funktsiyalarni   ham   kiritishimiz
mumkin.
Misol:
// Data Members
int roll;
int age;
int marks;
// Member Functions
void printDetails()
9 {
cout<<"Roll = "<<roll<<"\n";
cout<<"Age = "<<age<<"\n";
cout<<"Marks = "<<marks;
}
Yuqoridagi   tuzilmada   ma'lumotlar   a'zolari   har   qanday   talabaning   ro'yxati,
yoshi   va   belgilarini   saqlash   uchun   uchta   butun   sonli   o'zgaruvchilardir   va   a'zo
funktsiyasi   har   qanday   talabaning   yuqoridagi   barcha   tafsilotlarini   chop
etuvchi   printDetails() dir.
Struktura o'zgaruvchisi  tuzilish  deklaratsiyasi   bilan yoki   asosiy  turlar   kabi
alohida deklaratsiya sifatida e'lon qilinishi mumkin.
Misol:
struct Point
{
int x, y;
} p1; // The variable p1 is declared with 'Point'
// A variable declaration like basic data types
struct Point
{
int x, y;
}; 
int main()
{
struct Point p1; // The variable p1 is declared like a normal variable
}
10 Struktura   a'zolari   "{}"   jingalak   qavslar   yordamida   ishga   tushirilishi
mumkin. Misol uchun, quyida yaroqli ishga tushirish mavjud.
Misol:
struct Point {
int x, y;
};
int main()
{
// A valid initialization. member x gets value 0 and y
// gets value 1. The order of declaration is followed.
struct Point p1 = { 0, 1 };
}
Struktura a'zolariga nuqta (.) operatori yordamida kirish mumkin.  
Misol:
#include <iostream>
using namespace std;
struct Point {
int x, y;
};
int main()
{
struct Point p1 = { 0, 1 };
// Accessing members of point p1
p1.x = 20;
cout << "x = " << p1.x << ", y = " << p1.y;
return 0;
}
11 Agar   bizda   strukturaga   ko'rsatgich   bo'lsa,   a'zolarga   nuqta   (.)   operatori
o'rniga arrow ( -> ) operatori yordamida kirish mumkin.
Misol:
#include <iostream>
using namespace std;
struct Point {
int x, y;
};
int main()
{
struct Point p1 = { 1, 2 };
// p2 is a pointer to structure p1
struct Point* p2 = &p1;
// Accessing structure members using
// structure pointer
cout << p2->x << " " << p2->y;
return 0;
}
C++  da  struktura   bir  nechta  farqlardan  tashqari  sinf  bilan  bir   xil.  Ulardan
eng   muhimi   xavfsizlikdir.   Struktura   xavfsiz   emas   va   sinf   xavfsiz   bo'lsa   va
dasturlash   va   dizayn   tafsilotlarini   yashirishi   mumkin   bo'lsa,   oxirgi
foydalanuvchidan uning amalga oshirish tafsilotlarini yashira olmaydi.
5. Ma’lumotlarni qayta ishlash uchun STL konteynerlari. Vectorlar.
Vektorlar   dinamik   massivlar   bilan   bir   xil   bo'lib,   element   kiritilganda   yoki
o'chirilganda avtomatik ravishda o'lchamlarini  o'zgartirish qobiliyatiga ega, ularni
saqlash   konteyner   tomonidan   avtomatik   ravishda   amalga   oshiriladi.   Vektor
12 elementlari   qo'shni   xotiraga   joylashtiriladi,   shunda   ularga   kirish   va   iteratorlar
yordamida   o'tish   mumkin.   Vektorlarda   ma'lumotlar   oxirida   kiritiladi.   Oxirida
kiritish   differensial   vaqtni   oladi,   chunki   ba'zida   massivni   kengaytirish   kerak
bo'lishi mumkin. Oxirgi elementni olib tashlash faqat doimiy vaqtni oladi, chunki
hech qanday o'lcham o'zgarmaydi. Boshiga yoki o'rtasiga kiritish va o'chirish vaqt
bo'yicha chiziqli.
std::vector   C++ da vektor konteyneri va uning a'zo funksiyalarini o'z ichiga
olgan   sinf   shablonidir.   U   <vektor>   sarlavha   faylida   aniqlanadi   .   std::vector
sinfining a'zo funktsiyalari vektor konteynerlariga turli funktsiyalarni beradi.
C++ da vektorni e'lon qilish sintaksisi:
vector  <dataType> vektor nomi;
bu erda ma'lumotlar turi - vektorning har bir elementining ma'lumotlar turi.
Agar   siz   allaqachon   std   nom   maydonidan   foydalangan   bo'lsangiz,   std::   ni   olib
tashlashingiz mumkin.
Biz vektorni quyidagi usullar bilan ishga tushirishimiz mumkin:
1.   Ro'yxat yordamida ishga tushirish:
Ushbu   ishga   tushirish   deklaratsiya   bilan   amalga   oshiriladi.   Bu   erda   biz
ko'rsatilgan   elementlar   bilan   vektor   yaratish   uchun   elementlar   ro'yxatini   vektor
konstruktoriga o'tkazamiz.
vektor  <ma'lumotlar turi> nomi ({  qiymat1, qiymat2, qiymat3 ....  });
2.   Yagona qiymat bilan   ishga tushirish:
Ushbu ishga tushirish deklaratsiya bilan ham amalga oshiriladi. Bu erda biz
vektorning   o'lchamini   belgilaymiz   va   keyin   vektorning   har   bir   elementini   qiymat
bilan ishga tushiramiz.
vektor  <dataType> nomi (hajmi, qiymati);
3.   Boshqa vektordan ishga tushirish:
Ushbu ishga tushirish other_vec ning aniq nusxasi bo'lgan vektorni yaratish
uchun ishlatiladi.
vektor  <dataType> nomi (other_vec);
13 std::vector   sinfining   ba'zi   tez-tez   ishlatiladigan   a'zo   funktsiyalari   quyida
yozilgan:
 Iteratorlar:
begin()      - vektordagi birinchi elementga ishora qiluvchi iteratorni qaytaradi
end()      -   vektordagi   oxirgi   elementdan   keyingi   nazariy   elementga   ishora
qiluvchi iteratorni qaytaradi
rbegin()      -   vektordagi   oxirgi   elementga   ishora   qiluvchi   teskari   iteratorni
qaytaradi (teskari boshlanish). U oxirgi elementdan birinchi elementga o'tadi
rend()      -   vektordagi   birinchi   elementdan   oldingi   nazariy   elementga   ishora
qiluvchi teskari iteratorni qaytaradi (teskari uchi deb hisoblanadi)
cbegin()      -   vektordagi   birinchi   elementga   ishora   qiluvchi   doimiy   iteratorni
qaytaradi.
cend()      -   vektordagi   oxirgi   elementdan   keyingi   nazariy   elementga   ishora
qiluvchi doimiy iteratorni qaytaradi.
crbegin()      -   vektordagi   oxirgi   elementga   ishora   qiluvchi   doimiy   teskari
iteratorni   qaytaradi   (teskari   boshlanish).   U   oxirgi   elementdan   birinchi   elementga
o'tadi
crend()      -   vektordagi   birinchi   elementdan   oldingi   nazariy   elementga   ishora
qiluvchi doimiy teskari iteratorni qaytaradi (teskari uchi deb hisoblanadi)
 Imkoniyat
size()      - vektordagi elementlar sonini qaytaradi.
max_size()      -   vektor   ushlab   turadigan   elementlarning   maksimal   sonini
qaytaradi.
imkoniyatlar()      -   Elementlar   soni   sifatida   ifodalangan   vektorga   hozirda
ajratilgan saqlash maydoni hajmini qaytaradi.
resize(n)      –   konteyner   hajmini   “n”   elementlarni   o‘z   ichiga   oladigan   qilib
o‘zgartiradi.
empty()      - konteyner bo'sh yoki yo'qligini qaytaradi.
14 shrink_to_fit()      -   konteyner   hajmini   uning   o'lchamiga   mos   keladigan
darajada kamaytiradi va sig'imdan tashqari barcha elementlarni yo'q qiladi.
reserve()      - vektor sig'imi kamida n ta elementni o'z ichiga olishi uchun etarli
bo'lishini so'raydi.
Misol:
// C++ program to illustrate the 
// iterators in vector 
#include <iostream> 
#include <vector> 
using namespace std; 
int main() 
{ 
vector<int> g1; 
for (int i = 1; i <= 5; i++) 
g1.push_back(i); 
cout << "Output of begin and end: "; 
for (auto i = g1.begin(); i != g1.end(); ++i) 
cout << *i << " "; 
cout << "\nOutput of cbegin and cend: "; 
for (auto i = g1.cbegin(); i != g1.cend(); ++i) 
cout << *i << " "; 
cout << "\nOutput of rbegin and rend: "; 
for (auto ir = g1.rbegin(); ir != g1.rend(); ++ir) 
cout << *ir << " "; 
cout << "\nOutput of crbegin and crend : "; 
for (auto ir = g1.crbegin(); ir != g1.crend(); ++ir) 
15 cout << *ir << " "; 
return 0; 
} 
6. STL ning map konteyneri
Maplar   -   bu   elementlarni   xaritalangan   tarzda   saqlaydigan   assotsiativ
konteynerlar   .   Har   bir   element   asosiy   qiymatga   va   xaritalangan   qiymatga   ega.
Hech   qanday   ikkita   xaritalangan   qiymat   bir   xil   kalit   qiymatlarga   ega   bo'lishi
mumkin emas.
std::map   xarita   konteynerlari   uchun   sinf   shablonidir   va   u   <map>   sarlavha
faylida aniqlanadi.
Asosiy   std::map   a'zo   funktsiyalari.   std::map   bilan   bog'liq   ba'zi   asosiy
funktsiyalar:
begin()   - Xaritadagi birinchi elementga iteratorni qaytaradi.
end()   -   Xaritadagi   oxirgi   elementdan   keyingi   nazariy   elementga   iteratorni
qaytaradi.
size()   - Xaritadagi elementlar sonini qaytaradi.
max_size()   - Xarita sig'adigan elementlarning maksimal sonini qaytaradi.
empty()   - Xarita bo'sh yoki yo'qligini qaytaradi.
pair insert(keyvalue, mapvalue)   - Xaritaga yangi element qo'shadi.
delete   (iterator   pozitsiyasi)   -   elementni   iterator   tomonidan   ko'rsatilgan
joydan olib tashlaydi.
erase(const g)   – “g” kalit-qiymatini xaritadan olib tashlaydi.
clear()   - Xaritadan barcha elementlarni olib tashlaydi.
std :: map ga misollar
Quyidagi   misollar   xarita   konteynerlarida   asosiy   operatsiyalarni   qanday
bajarishni ko'rsatadi.
16 1-misol: start() va end() funksiyalari
// C++ program to illustrate the begin and end iterator
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
// Create a map of strings to integers
map<string, int> mp;
// Insert some values into the map
mp["one"] = 1;
mp["two"] = 2;
mp["three"] = 3;
// Get an iterator pointing to the first element in the
// map
map<string, int>::iterator it = mp.begin();
// Iterate through the map and print the elements
while (it != mp.end()) {
cout << "Key: " << it->first
<< ", Value: " << it->second << endl;
++it;
}
return 0;
}
Vaqt murakkabligi:   O(n) bu yerda n - xarita o'lchami.
17 Yordamchi bo'shliq:   O(n)
2-misol:   size() funksiyasi
// C++ program to illustrate the size() function
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
// Create a map of strings to integers
map<string, int> map;
// Insert some values into the map
map["one"] = 1;
map["two"] = 2;
map["three"] = 3;
// Print the size of the map
cout << "Size of map: " << map.size() << endl;
return 0;
}
Vaqt murakkabligi:   O(1).
3-misol: Butun sonlar xaritasini amalga oshirish
// C++ program to implement map container
#include <iostream>
#include <map>
18 #include <string>
using namespace std;
int main()
{
// Create a map of strings to integers
map<string, int> map;
// Insert some values into the map
map["one"] = 1;
map["two"] = 2;
map["three"] = 3;
// Print the values in the map
cout << "Key: one, Value: " << map["one"] << endl;
cout << "Key: two, Value: " << map["two"] << endl;
cout << "Key: three, Value: " << map["three"] << endl;
// Check if a key is in the map
if (map.count("four") > 0) {
cout << "Key 'four' is in the map" << endl;
}
else {
cout << "Key 'four' is not in the map" << endl;
}
return 0;
}
19 III. XULOSA
C++   tilidagi   murakkab   ma lumotlar   turlari   tilning   imkoniyatlarini   butunʼ
sonlar   va   belgilar   kabi   asosiy   ma lumotlar   turlaridan   tashqari   kengaytiradi.   Ular
ʼ
sizga   real   dunyo   ob'ektlarining   tuzilgan   tasvirlarini   yaratish   va   ularni   samarali
boshqarish   imkonini   beradi.   Massivlar   o'xshash   ma'lumotlar   to'plamini   saqlaydi,
tuzilmalar   esa   turli   xil   ma'lumotlar   nuqtalarini   bitta   nom   ostida   guruhlaydi.
Ko'rsatkichlar   va   havolalar   ma'lumotlarga   bilvosita   kirish   va   xotirani   boshqarish
mexanizmlarini   ta'minlaydi.   Sanab   o'tilgan   turlar   kodni   o'qishni   yaxshilaydi   va
sinflar   inkapsulyatsiya   va   meros   kabi   kuchli   ob'ektga   yo'naltirilgan   dasturlash
xususiyatlarini   taklif   qiladi.   Ushbu   murakkab   ma'lumotlar   turlarini   tushunish   va
ulardan   foydalanish   turli   xil   ma'lumotlar   tuzilmalari   va   murakkab   muammolarni
hal qila oladigan mustahkam va samarali C++ dasturlarini yaratish uchun zarurdir.
20 IV. FOYDALANILGAN ADABIYOTLAR
1. Nazarov.F,   Eshtemirov.S   “Algoritm   va   dasturlash   asoslari”.   Qo’llanma.
Samarqand-2019;
2. Yusupov.O;   Eshonqulov.E   “Algoritm   va   ma’lumotlar   strukturasi”.   O’quv-
qo’lanma. Samarqand-2021.
3. Sh.A.Sadullayeva, A.Z.Maxmudov. C++ DA DASTURLASH fanidan o‘quv
qo‘llanma, Toshkent 2017;
INTERNET RESUSRLARI
1. https://www.geeksforgeeks.org/pointers     
2. https://www.geeksforgeeks.org/struct/
3. https://www.geeksforgeeks.org/vector-in-c++/   
4. https://www.geeksforgeeks.org/map-in-c++ /   
21

Ma’lumotlarning murakkab turlani tasvirlash va qayta ishlash MUNDARIJA I. KIRISH ....................................................................................................................................................... 2 II. ASOSIY QISM ............................................................................................................................................ 4 1. Murakkab ma’lumotlar turlari nima? ................................................................................................... 4 2. Ma’lumotlarning murakkab turlari. Massivlar ..................................................................................... 4 3. Ko’rsatkichlar ....................................................................................................................................... 7 4. Strukturalar .......................................................................................................................................... 8 5. Ma’lumotlarni qayta ishlash uchun STL konteynerlari. Vectorlar. ..................................................... 12 6. STL ning map konteyneri .................................................................................................................... 16 III. XULOSA ................................................................................................................................................. 20 IV. FOYDALANILGAN ADABIYOTLAR ........................................................................................................... 21

I. KIRISH C++ da murakkab ma'lumotlar turlari asosiy ma'lumotlar turlarini (masalan, int yoki double) murakkab tuzilmalarga guruhlaydi. Ushbu tuzilmalar sizga asosiy raqamlar yoki belgilar doirasidan tashqariga chiqadigan ma'lumotlarni ko'rsatish va boshqarish imkonini beradi. Quyida C++ tilidagi ba zi asosiy murakkabʼ ma lumotlar turlarining taqsimoti keltirilgan: ʼ  Massivlar: massiv bitta nom ostida bir xil ma'lumotlar turidagi elementlar to'plamini saqlaydi. Siz alohida elementlarga massiv ichidagi indeksidan foydalanib kirishingiz mumkin.  Strukturalar (strukturalar): Struktura turli xil ma'lumotlar turlarining o'zgaruvchilarini bitta nom ostida to'playdigan foydalanuvchi tomonidan belgilangan ma'lumotlar turini belgilaydi. Bu sizga tegishli ma'lumotlarni birgalikda guruhlash va yanada mazmunli ma'lumotlar birliklarini yaratish imkonini beradi.  Ko'rsatkichlar: Ko'rsatkichlar xotira manzillarini saqlaydi. Ular xotirada boshqa o'zgaruvchilarning joylashuvini saqlaydigan o'zgaruvchilar kabi ishlaydi. Bu ma'lumotlarga bilvosita kirish va manipulyatsiya qilish imkonini beradi.  Ma'lumotnomalar: Ma'lumotnomalar asosan mavjud o'zgaruvchilar uchun taxalluslardir. Ular nusxa yaratmasdan bir xil ma'lumotlarga kirishning boshqa usulini taqdim etadi.  Sanalgan turlar (enumlar): Enumlar nomli butun son konstantalaridan tashkil topgan foydalanuvchi tomonidan belgilangan ma lumotlar turlarini ʼ belgilaydi. Ular xom raqamli qiymatlar o'rniga mazmunli nomlar yordamida kodni o'qishni yaxshilaydi.  Sinflar: Sinflar tuzilmalarga o'xshaydi, lekin inkapsulyatsiya (ma'lumotlarni yashirish) va meros (mavjud sinflar asosida yangi sinflar yaratish) kabi kuchliroq xususiyatlarni taklif qiladi. Ular o'zlarining ma'lumotlari va xatti-harakatlarini boshqaradigan ob'ektlarni yaratish rejasini taqdim etadilar. 2

 Birlashmalar (kamroq): Uyushmalar bir xil xotira joyida turli xil ma'lumotlar turlarini saqlashga imkon beradi. Biroq, ittifoqning faqat bitta a'zosi istalgan vaqtda qiymatga ega bo'lishi mumkin. Bundan tashqari, C++ standart kutubxonasi <complex> murakkab raqamlar bilan ishlash uchun sarlavhani taqdim etadi. Ushbu sarlavha haqiqiy va xayoliy qismlarga ega murakkab raqamlarni ifodalovchi shablon sinfini belgilaydi , bu erda T yoki kabi asosiy son turi bo'lishi mumkin . std::complex<T>floatdouble Ushbu murakkab ma'lumotlar turlarini tushunish va ulardan foydalanish orqali siz murakkabroq ma'lumotlar tuzilmalarini boshqaradigan va har xil turdagi ma'lumotlarni manipulyatsiya qilishni talab qiladigan muammolarni hal qiladigan C++ dasturlarini yaratishingiz mumkin. 3

II. ASOSIY QISM 1. Murakkab ma’lumotlar turlari nima? Murakkab tiplar - bu ibtidoiy ma'lumotlar turlaridan tashkil topgan ichki ma'lumotlar tuzilmalari. Ushbu ma'lumotlar tuzilmalari boshqa murakkab turlardan ham iborat bo'lishi mumkin. Murakkab turlarning ba'zi misollariga struct (satr), massiv/ro'yxat, xarita va ittifoq kiradi. Murakkab turlar Python, C++ va Java kabi ko'pgina dasturlash tillari tomonidan qo'llab-quvvatlanadi. Ular, shuningdek, 8.0 da kompozit (struct) turini joriy etgan PostgreSQL kabi ma'lumotlar bazalari tomonidan qo'llab-quvvatlanadi. Va ular Vertica-da qo'llab-quvvatlanadi. Biz qo'shayotganimiz bu turlar uchun yanada boyroq, to'liqroq qo'llab-quvvatlashdir, bu nafaqat ORC va Parket- da murakkab turlarni so'rash, balki faylni birinchi navbatda ancha kattaroq satr va ustun formatiga o'zgartirmasdan tezda amalga oshirishdir. Murakkab ma'lumotlar turlari C++ dasturlashda mustahkam va samarali ilovalar yaratish uchun asosiy hisoblanadi. Murakkab ma’lumotlar turlariga yana ma’lumotlarni qayta ishlash C++ standart kutubxonasi tomonidan taqdim etilgan konteynerlar ya’ni STL konteylari kiradi. STL konteynerlariga vector, list, set, map kabilar kiradi. 2. Ma’lumotlarning murakkab turlari. Massivlar Agar struktura bir hil kattalikdagi tiplardan tuzilgan bo'lsa, uning nomi massiv (array) deyiladi. Massivlar dasturlashda eng ko'p qo'laniladigan ma’lumot tiplaridir. Massivlar hotirada ketma-ket joylashgan, bir tipdagi o'zgaruvchilar guruhidir. Alohida bir o’zgaruvchini ko’rsatish uchun massiv nomi va kerakli o’zgaruvchi indeksini yozamiz. C/C++ dagi massivlardagi elementlar indeksi har doim noldan boshlanadi. Bizda char tipidagi m nomli massiv bor bo'lsin va uning 4 dona elementi mavjud bo'lsin. Sxemada bunday ko’rsataylik: 4

m[0] -> 4 m[1] -> -44 m[2] -> 109 m[3] -> 23 Ko’rib turganimizdek, elementga murojaat qilish uchun massiv nomi va [] qavslar ichida element indeksi yoziladi. Bu yerda birinchi element qiymati 4, ikkinchi element - 1 nomerli indeksda -44 qiymatlari bor ekan. Ohirgi element indeksi n-1 bo'ladi (n - massiv elementlari soni). [] qavslar ichidagi indeks butun son yoki butun songa olib keluvchi ifoda bo'lmog'i lozim. Masalan: int k = 4, l = 2; m[ k-l ] = 77; // m[2] = 77 m[3] *= 2; // m[3] = 46 double d = m[0] * 6; // d = 24 cout << m[1]; // Ekranda: -44 Massivlarni ishlatish uchun ularni e’lon qilish va kerak bo'lsa massiv elementlarini initsalizatsiya qilish kerak. Massiv e’lon qilinganda kompilyator elementlar soniga teng hajmda hotira ajratadi. Masalan yuqorida qo’llanilgan char tipidagi m massivini e’lon qilaylik. char m[4]; Bu yerdagi 4 soni massivdagi elementlar miqdorini bildiradi. Bir necha massivni e'londa bersak ham bo'ladi: int m1[4], m2[99], k, l = 0; Massiv elementlari dastur davomida initsalizatsiya qilishimiz mumkin, yoki boshlang’ich qiymatlarni e’lon vaqtida, {} qavslar ichida ham bersak bo’ladi. {} qavslardagagi qiymatlar massiv initsalizaytsiya ro’yhati deyiladi. int n[5] = {3, 5, -33, 5, 90}; Yuqorida birinchi elementning qiymati 3, ikkinchiniki 5 ... ohirgi beshinchi element qiymati esa 90 bo’ldi. 5