Assotsiativ konteynerlar tezkor qidiruv qobiliyatiga EGA bo'lgan buyurtma qilingan ma'lumotlar tuzilishini (O (log n) murakkabligi bilan) amalga oshiradi. Assotsiativ konteynerlar




Download 2,16 Mb.
bet6/8
Sana17.05.2024
Hajmi2,16 Mb.
#239109
1   2   3   4   5   6   7   8
Bog'liq
Assotsiativ konteynerlar haqida; set va multiset sinflari; map v

#include

  • #include

  • using namespace System;

  • using namespace std;

  • int main()

  • { srand(time(NULL));

  • set s; int n;

  • cout<<"Elementlar sonini: "; cin>>n;

  • multiset M, M2;

  • for (int i = 0; i < n; i++)

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

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

  • }

  • auto k2 = M.begin();

  • set s2;

  • for (int i = 0; i < n; i++)

  • {

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

  • }

  • cout<

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

  • {

  • cout<<*i<<" ";

  • }

  • cout<

  • cout<

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

  • {

  • cout<<*i<<" ";

  • }

  • cout<

  • int soni=0;

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

  • {

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

  • {

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

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

  • }

  • }

  • if(soni>0)cout<<*i<<" -"<

  • else {cout<<*i<<" - qatnashmagan "<

  • soni = 0;

  • }

  • //cout<

  • auto k = M.begin();

  • auto l = M2.begin();

  • for (int i = 0; i < n; i++)

  • {

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

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

  • }

  • cout<

  • cout<

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

  • {

  • cout<<*i<<" ";

  • }

  • getchar(); getchar();

  • return 0;

  • }

    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 s; int n;

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

    10. multimap M, M2;

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

    12. { string St;

    13. int step;

    14. cout<

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

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

    17. s.insert(pair(St,step));

    18. M.insert(pair(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(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



    unordered_set ning modifikatorlari:

    Nomi

    Izoh

    clear

    Konteynerni tozalaydi.

    insert

    Konteynerga element qo’shadi.

    emplace

    Elementlarni "joyida" quradi va berilgan pozitsiyadan boshlab ularni joylashtiradi.

    emplace_hint

    Foydalanish joyidagi struktura elementlari.

    erase

    Konteynerdan element ochirish.

    swap

    Tarkibni almashtirish.

    count

    Muayyan kalitga mos keladigan elementlar sonini qaytaradi.

    find

    Ma'lum bir kalitga ega bo'lgan elementni topadi.

    equal_range

    Ma'lum bir kalit uchun elementlar to'plamini qaytaradi.

    bucket_count

    Buketlar sonini qaytaradi.


    Download 2,16 Mb.
  • 1   2   3   4   5   6   7   8




    Download 2,16 Mb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Assotsiativ konteynerlar tezkor qidiruv qobiliyatiga EGA bo'lgan buyurtma qilingan ma'lumotlar tuzilishini (O (log n) murakkabligi bilan) amalga oshiradi. Assotsiativ konteynerlar

    Download 2,16 Mb.