Mavzu: Assotsiativ konteynerlar Hisoblashda assotsiativ konteynerlar



Download 34,71 Kb.
bet2/2
Sana07.04.2022
Hajmi34,71 Kb.
#534502
1   2
Bog'liq
5-mavzu (1)

Ishlash [ tahrirlash ]
Shuningdek qarang: Big O notation va Time murakkabligi
Assotsiativ konteynerlarga qo'llanilishi mumkin bo'lgan operatsiyalarning asimptotik murakkabligi quyidagicha:

Operatsiya

Murakkablik

Element qidirilmoqda

O(log n)

Yangi element kiritish

O(log n)

Iteratorni oshirish/kamaytirish

O(log n) (agar faqat o'sish yoki kamayish amalga oshirilsa, amortizatsiya qilingan O(1))

Bitta elementni olib tashlash

O(log n)

Funksiyalarning umumiy ko'rinishi [ tahrir ]
Konteynerlar konteyner nomlari bilan nomlangan sarlavhalarda aniqlanadi, masalan , to'plam sarlavhasida aniqlanadi . Barcha konteynerlar konteyner talablariga javob beradi tushunchasi , ya'ni ular begin() , end() , size() , max_size() , empty() va swap() usullariga ega.




o'rnatish

xarita

multiset

multimap

Tavsif




(konstruktor)

(konstruktor)

(konstruktor)

(konstruktor)

Har xil manbalardan konteyner yasaydi

(destruktor)

(destruktor)

(destruktor)

(destruktor)

To'plam va uning tarkibidagi elementlarni yo'q qiladi

operator =

operator =

operator =

operator =

Konteynerga qiymatlarni tayinlaydi

get_allocator

get_allocator

get_allocator

get_allocator

Elementlar uchun xotira ajratish uchun ishlatiladigan ajratgichni qaytaradi

Elementga kirish

Yoʻq

da

Yoʻq

Yoʻq

Belgilangan elementga chegaralarni tekshirish orqali kiradi.

Yoʻq

operator[]

Yoʻq

Yoʻq

Belgilangan elementga cheklovsiz kirish.

Iteratorlar

boshlanishi

boshlanishi

boshlanishi

boshlanishi

Iteratorni konteyner boshiga qaytaradi

oxiri

oxiri

oxiri

oxiri

Iteratorni konteyner oxiriga qaytaradi

rboshlang

rboshlang

rboshlang

rboshlang

Konteynerning teskari boshiga teskari iteratorni qaytaradi

parchalash

parchalash

parchalash

parchalash

Konteynerning teskari uchiga teskari iteratorni qaytaradi

Imkoniyat

bo'sh

bo'sh

bo'sh

bo'sh

Idish bo'sh yoki yo'qligini tekshiradi

hajmi

hajmi

hajmi

hajmi

Konteynerdagi elementlar sonini qaytaradi.

maksimal_oʻlcham

maksimal_oʻlcham

maksimal_oʻlcham

maksimal_oʻlcham

Konteynerdagi elementlarning mumkin bo'lgan maksimal sonini qaytaradi

Modifikatorlar

aniq

aniq

aniq

aniq

Tarkibni tozalaydi.

kiritmoq

kiritmoq

kiritmoq

kiritmoq

Elementlarni kiritadi.

joylashtirmoq

joylashtirmoq

joylashtirmoq

joylashtirmoq

Elementlarni joyida quradi ( C++ 11 )

emplace_shint

emplace_shint

emplace_shint

emplace_shint

Maslahat yordamida elementlarni joyida quradi ( C++ 11 )

o'chirish

o'chirish

o'chirish

o'chirish

Elementlarni o'chiradi.

almashtirish

almashtirish

almashtirish

almashtirish

Tarkibni boshqa idish bilan almashtiradi.

Axtarish, izlash

hisoblash

hisoblash

hisoblash

hisoblash

Muayyan kalitga mos keladigan elementlar sonini qaytaradi.

toping

toping

toping

toping

Muayyan kalitga ega elementni topadi.

teng_oraliq

teng_oraliq

teng_oraliq

teng_oraliq

Muayyan kalitga mos keladigan elementlar qatorini qaytaradi.

pastki_chegara

pastki_chegara

pastki_chegara

pastki_chegara

Berilgan qiymatdan kam bo'lmagan kalit bilan iteratorni birinchi elementga qaytaradi.

yuqori_chegara

yuqori_chegara

yuqori_chegara

yuqori_chegara

Muayyan qiymatdan kattaroq kalitga ega bo'lgan birinchi elementga iteratorni qaytaradi.

Kuzatuvchilar

key_comp

key_comp

key_comp

key_comp

Kalit taqqoslash funksiyasini qaytaradi.

qiymat_komp

qiymat_komp

qiymat_komp

qiymat_komp

Qiymatni taqqoslash funksiyasini qaytaradi. Set va multisetda bu funksiya key_comp ga ekvivalentdir , chunki elementlar faqat kalitdan tuzilgan.

Foydalanish [ tahrirlash ]
Quyidagi kod so'zlarning takrorlanishini hisoblash uchun map dan qanday foydalanishni ko'rsatadi. U kalit sifatida so'zni va qiymat sifatida hisobni ishlatadi.
#o'z ichiga oladi
#o'z ichiga oladi
#o'z ichiga oladi

int asosiy ()


{
std :: map < std :: string, int > so'zlar soni;
std :: string s;


esa (std :: cin >> s && s != "oxiri" )
++ so'zlar soni [lar];


esa (std :: cin >> s && s != "oxiri" )
std :: cout << s << '' << so'zlar soni << '\n' ;
}
Bajarilayotganda foydalanuvchi avval boʻshliqlar bilan ajratilgan qator soʻzlarni va kiritish yakunini bildiruvchi “end” soʻzini teradi; keyin foydalanuvchi har bir so'z oldingi qatorda necha marta sodir bo'lganligini so'rash uchun so'zlarni kiritishi mumkin.
Yuqoridagi misol, agar kalit bilan bog'liq bo'lmasa, [] operatori xaritaga yangi ob'ektlarni (standart konstruktor yordamida) kiritishini ham ko'rsatadi. Shunday qilib, integral tiplar noldan boshlanadi, satrlar bo'sh satrlarga ishga tushiriladi va hokazo.
Quyidagi misolda insert funksiyasidan foydalangan holda xaritaga elementlarni kiritish va xarita iteratori va find funksiyasidan foydalanib kalitni qidirish tasvirlangan:
#o'z ichiga oladi
#o'z ichiga oladi
#o'z ichiga oladi // make_pair

int asosiy ()


{
typedef std :: map < char , int > MapType;
MapType mening_xarita;


// insert funksiyasidan foydalanib elementlarni kiritish
my_map.insert(std :: pair < char , int > ( 'a' , 1 ));
my_map.insert(std :: pair < char , int > ( 'b' , 2 ));
my_map.insert(std :: pair < char , int > ( 'c' , 3 ));
my_map.insert(MapType :: value_type( 'd' , 4 )); // barcha standart konteynerlar ushbu typedefni ta'minlaydi
my_map.insert(std :: make_pair( 'e' , 5 )); // make_pair yordamchi funksiyasidan ham foydalanishi mumkin
my_map.insert({ 'f' , 6 }); // C++ 11 boshlang'ich ro'yxati yordamida
//xarita tugmalari avtomatik ravishda pastdan yuqoriga saralanadi.
//Shunday qilib, my_map.begin() birinchi kiritilgan kalit emas, balki eng past kalit qiymatiga ishora qiladi.
MapType :: iterator iter = my_map.begin();


// o'chirish funktsiyasidan foydalangan holda birinchi elementni o'chirish
my_map.erase(iter);


// xarita hajmini chiqarish
std :: cout << "Mening_xaritamning o'lchami:" << my_map.size() << '\n' ;

std :: cout << "Qidirish uchun kalitni kiriting: " ;


char c;
std :: cin >> c;


// find, agar topilsa, mos keladigan elementga iteratorni qaytaradi
// yoki kalit topilmasa, xaritaning oxirigacha
iter = my_map.find(c);
agar (iter != my_map.end() )
std :: cout << "Qiymat:" << iter -> soniya << '\n' ;
boshqa
std :: cout << "Kalit mening xaritamda yo'q" << '\n' ;


// xaritadagi yozuvlarni tozalash
my_map.clear();
}
Yuqoridagi misolda qo'shish funksiyasi yordamida oltita element kiritiladi, so'ngra birinchi element o'chiriladi. Keyin xaritaning o'lchami chiqariladi. Keyinchalik, foydalanuvchidan qidirish uchun kalit so'raladi. Iterator yordamida find funksiyasi berilgan kalit bilan elementni qidiradi. Agar u kalitni topsa, dastur elementning qiymatini chop etadi. Agar uni topa olmasa, xaritaning oxirigacha bo'lgan iterator qaytariladi va u kalitni topib bo'lmaganligini ko'rsatadi. Nihoyat, daraxtdagi barcha elementlar o'chiriladi.
Iteratorlar [ tahrirlash ]
Xaritalar konteynerdagi muayyan elementlarga ishora qilish uchun iteratorlardan foydalanishi mumkin. Iterator elementning kalitiga ham, xaritalangan qiymatiga ham kirishi mumkin: [1]
map < Key,T >:: iterator bu; // xarita iteratorini e'lon qiladi
u -> birinchi; // kalit qiymati
u -> ikkinchi; // ko'rsatilgan qiymat
( * bu); // "element qiymati" turi: pair
Quyida iteratorlar yordamida barcha kalit va qiymatlarni ko'rsatish uchun xarita bo'ylab aylanish misoli keltirilgan:
#o'z ichiga oladi
#o'z ichiga oladi
#o'z ichiga oladi

int asosiy ()


{
std :: xaritasi < std :: string, int > maʼlumotlar{
{ "Bobs ball" , 10 },
{ "Martys gol" , 15 },
{ "Mehmets ball" , 34 },
{ "Rokki hisobi" , 22 },
{ "Rokki hisobi" , 23 } /*22-ning ustiga yoziladi, chunki kalitlar bir xil bo'ladi */
};
// Xaritani takrorlang va barcha kalit/qiymat juftlarini chop eting.
uchun ( konst avto & element : ma'lumotlar)
{
std :: cout << "Kim (kalit = birinchi): " << element.birinchi;
std :: cout << " Bal (qiymat = soniya): " << element.ikkinchi << '\n' ;
}


qaytish 0 ;
}
Yuqoridagi namunani GCC kompilyatorida kompilyatsiya qilish uchun maxsus standart tanlash bayrog'idan foydalanish kerak.
g ++ - std = c ++11 source.cpp - o src
Bu kalitlar bo'yicha tartiblangan butun xaritaning kalitlari va qiymatlarini chiqaradi.
Download 34,71 Kb.

Do'stlaringiz bilan baham:
1   2




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©www.hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish