Tartiblanmagan assosiativ konteynerlar (unordered set, unordered map, unordered multiset, unordered multimap)


Tartiblanmagan konteynerlarda ishlatilmaydigan usullar



Yüklə 196,69 Kb.
səhifə9/9
tarix30.12.2023
ölçüsü196,69 Kb.
#167513
1   2   3   4   5   6   7   8   9
Mavzu assosiativ va tartiblanmagan assosiativ konteynerlar reja-fayllar

Tartiblanmagan konteynerlarda ishlatilmaydigan usullar:


  • [>], [=], [<=] taqqoslash amallari ( [==]va [!=]amallarni qo‘llab quvvatlaydi)


  • lower_bound va upper_bound


  • Ikki tomonlama iteratorlar: rbegin, crbegin, rend, crend Tartiblanmagan konteynerlarning usullari:




Xeshlash uslubi (Bu usullar tartibsiz konteynerlarning ishlashini boshqarish imkonini beradi):
    • load_factor() – to‘ldirish koeffitsentini qaytaradi (yuqoriga qarang)


    • max_load_factor() – Agar argumentsiz foydalanilsa, maksimal to‘ldirish qiymati uchun float tipini qaytaradi, agar argument sifatida float tipi foydalanilsa, maksimal to‘ldirish qiymati uchun o‘rnatiladi . Agar terminator omili ushbu chegaradan oshsa, konteyner avtomatik ravishda segmentlar sonini oshirishi mumkin.


    • rehash(size_type count) – konteyner uchun qayta xeshlash o‘tkazadi, yaʻni yacheykalarni sonini (backet_count) backet_count >= count va backet_count > size/max_load_factor bo‘lishi uchun.


    • reserve(size_type count) – songa yacheykalar sonni o‘rnatadi, konteynerni qayta xeshlash o‘kazmaslik va maksimal to‘ldirish koeffitsienti uchun, oxirgi yacheykaning count hisoblanadi.


Maksimal samaradorlikka erishish uchun har doim maksimal yacheykalar sonini aniq belgilash kerak. Tavsiya etilgan qiymatlar 0.7 dan 0.8 gacha oraliqda bo‘ladi. Element qidirish uchun standart maksimal yacheykalar soni o‘rnatiladi (


    1. ga teng) va dastuochilar tomonidan 0.7 o‘rnatiladi.


Xesh funksiyasining o‘zi konteyner faoliyatini yaxshilashi mumkin, ammo bu mavzu doirasidan chiqib ketishga olib keladi.


Interfeys segmentlari. Segment elementlari bilan bevosita ishlash uchun (bog‘langan ro‘yxat sifatida) quyidagi usullardan foydalaniladi:
      • begin(), end(), cbegin(), cend() – iteratorla. Eʻtibor bering, bular segmentlar uchun, massiv uchun emas! Konteynerlar uchun shularning anologlari yaratilgan.


      • size_type bucket_count() – massivdagi segmentlar sonini qaytaradi.


      • size_type max_bucket_count() – muuumkin bo‘lgan maksimal elementlar soni (tizimga va joriy qilishga bog‘liq).


      • size_type bucket_size(size_type n) –n indeksli segmentdagi elementlar soni.


      • size_type bucket(Key) – kalit asosida segment sonini qaytaradi.


Bu usullar asosida xesh jadvalni vizual ko‘rinishini tasavvur qilish mumkin. 3.6-dastur. Tartiblanmagan konteynerlardan foydalanish.


#include "stdafx.h"


#include #include #include #include #include #include
using namespace std;
int main() {
default_random_engine rnd(time(0)); uniform_int_distribution g(100, 999); unordered_multiset unm;
size_t n = 60; unm.reserve(n); while (n--) unm.emplace(g(rnd));
cout << "Konteynerdagi segmentlar soni: "
<< unm.bucket_count()
<< "\n"
<< "Maksimal toʻldirishlar ko'ffitsenti: "
<< unm.max_load_factor()
<< endl;
auto start = chrono::system_clock::now(); auto res = unm.find(200); auto end = chrono::system_clock::now(); auto elapsed = end - start; cout << "Natija => "
<< elapsed.count()
<< endl;
// Oʻzimiz tomondam Maksimal toʻldirishlar ko'ffitsenti oʻrnatamiz unm.max_load_factor(0.7);
unm.rehash(200);
cout << "Konteynerdagi segmentlar soni: "
<< unm.bucket_count()
<< "\n"
<< "Maksimal toʻldirishlar ko'ffitsenti: "
<< unm.max_load_factor()
<< endl;
start = chrono::system_clock::now(); res = unm.find(200);

end = chrono::system_clock::now(); elapsed = end - start; cout << "Natija => "


<< elapsed.count()
<< endl;
cout << " Hash tuzilmasi " << endl;
for (size_t i = 0; i < unm.bucket_count(); i++) { cout << "Segment N:" << setw(3) << i << "
=> ";
// Iteratorga lokal segmentlarni olish auto first = unm.cbegin(i); auto last = unm.cend(i); while (first != last) {
cout << *first++ << " ";
}
cout << endl;
}
system("pause"); return 0;
}

3.6-dastur. Output


Konteynerdagi segmentlar soni: 32 Maksimal toʻldirishlar ko'ffitsenti: 1 Natija => 30023 Konteynerdagi segmentlar soni: 256 Maksimal toʻldirishlar ko'ffitsenti: 0.7 Natija => 10004 Segment N: 0 => Segment N: 1 => Segment N: 2 => Segment N: 3 => Segment N: 4 =>


Segment N: 5 => Segment N: 6 => Segment N: 7 => Segment N: 8 => Segment N: 9 => 646
Segment N: 10 => Segment N: 11 => Segment N: 12 => Segment N: 13 => Segment N: 14 =>
Segment N: 15 => Segment N: 16 => Segment N: 17 => Segment N: 18 => Segment N: 19 =>
Segment N: 20 => Segment N: 21 => Segment N: 22 => Segment N: 23 => Segment N: 24 => 940
Segment N: 25 => Segment N: 26 => Segment N: 27 => Segment N: 28 => Segment N: 29 =>
Segment N: 30 => 717 Segment N: 31 => Segment N: 32 => Segment N: 33 => Segment N: 34 =>
Segment N: 35 => Segment N: 36 => Segment N: 37 => Segment N: 38 => Segment N: 39 =>

Segment N: 40 => Segment N: 41 => Segment N: 42 => Segment N: 43 => Segment N: 44 =>


Segment N: 45 => 841 738
Segment N: 46 => Segment N: 47 => Segment N: 48 => Segment N: 49 => Segment N: 50 => Segment N: 51 => Segment N: 52 => 768 Segment N: 53 => Segment N: 54 => Segment N: 55 => Segment N: 56 => Segment N: 57 => Segment N: 58 => Segment N: 59 => Segment N: 60 => 631 Segment N: 61 => Segment N: 62 => 316 Segment N: 63 => Segment N: 64 => Segment N: 65 => Segment N: 66 => Segment N: 67 => Segment N: 68 => Segment N: 69 => Segment N: 70 => Segment N: 71
=> Segment N: 72 => Segment N: 73 => Segment N: 74 => Segment N: 75 => Segment N: 76 => Segment N: 77 => Segment N: 78 => Segment N: 79 => Segment N: 80 => Segment N: 81 => Segment N: 82 => Segment N: 83 => Segment N: 84
=> Segment N: 85 => Segment N: 86 => Segment N: 87 => Segment N: 88 => Segment N: 89 => Segment N: 90 => Segment N: 91 => Segment N: 92 => 498 Segment N: 93 => Segment N: 94 => 187 476
Segment N: 95 => Segment N: 96 => Segment N: 97 => Segment N: 98 => 280 Segment N: 99 => Segment N:100 => 225 Segment N:101 => Segment N:102 => Segment N:103 => Segment N:104 => Segment N:105 => 973 Segment N:106 => Segment N:107 => Segment N:108 => Segment N:109 => Segment N:110 => Segment N:111 => Segment N:112 => Segment N:113 => Segment N:114 => Segment N:115 => Segment N:116 => 960 Segment N:117 => Segment N:118 => Segment N:119 => Segment N:120 => Segment N:121 => 630 Segment N:122 => Segment N:123 => Segment N:124 => 567 Segment N:125 => Segment N:126 => Segment N:127 => Segment N:128 => Segment N:129 => Segment N:130 => Segment N:131 => Segment N:132 => Segment N:133 => 351 Segment N:134 => 227 Segment N:135 => Segment N:136 => Segment N:137 => Segment N:138 => Segment N:139 => Segment N:140 => Segment N:141 => Segment N:142 => Segment N:143 => Segment N:144 => Segment N:145 => Segment N:146 => 761 Segment N:147 => Segment N:148 => 145 Segment N:149 => Segment N:150 => Segment N:151 => Segment N:152 => Segment N:153 => Segment N:154 => Segment N:155 => Segment N:156 => Segment N:157 => Segment N:158 => Segment N:159 => Segment N:160 => Segment N:161 => Segment N:162 => Segment N:163 => Segment N:164 => Segment N:165 => Segment N:166 => Segment N:167 => 242 Segment N:168 => Segment N:169 => Segment
N:170 => Segment N:171 => Segment N:172 => Segment N:173 => Segment

N:174 => Segment N:175 => Segment N:176 => Segment N:177 => Segment N:178 => Segment N:179 => Segment N:180 => 458 Segment N:181 => Segment N:182 => Segment N:183 => Segment N:184 => Segment N:185 => Segment N:186 => Segment N:187 => Segment N:188 => Segment N:189 => Segment N:190 => Segment N:191 => Segment N:192 => 852 Segment N:193 => Segment N:194 => Segment N:195 => Segment N:196 => Segment N:197 => 287 Segment N:198 => Segment N:199 => Segment N:200 => Segment N:201 => Segment N:202 => Segment N:203 => Segment N:204 => Segment N:205 => Segment N:206 => Segment N:207 => Segment N:208 => Segment N:209 => 483 Segment N:210 => 697


Segment N:211 => Segment N:212 => Segment N:213 => Segment N:214 =>

Segment N:215 => 967 Segment N:216 => Segment N:217 => Segment N:218 => Segment N:219 => Segment N:220 => Segment N:221 => Segment N:222 => Segment N:223 => Segment N:224 => Segment N:225 => Segment N:226 => Segment N:227 => Segment N:228 => Segment N:229 => 666 Segment N:230 => 484 Segment N:231 => Segment N:232 => 603 Segment N:233 => Segment N:234 => Segment N:235 => 254 Segment N:236 => Segment N:237 => Segment N:238 => Segment N:239 => Segment N:240 => Segment N:241 => Segment N:242 => Segment N:243 => Segment N:244 => Segment N:245 => Segment N:246 => Segment N:247 => Segment N:248 => Segment N:249 => Segment N:250 => Segment N:251 => Segment N:252 => Segment N:253 => Segment N:254 =>


Segment N:255 =>

Tartiblanmagan konteynerlarning sinflari murakkab tuzilishga ega, ammo standart vositalar bilan ham tartiblangan konteynerlardan kam bo‘lmagan mukammal ishlashni ko‘rsatadi. Tartiblangan konteynerlar yoki tartiblanmagan konteynerlar orasidagi tanlov vazifaga bog‘liq bo‘ladi. Assotsiativ konteynerlarning asosiy usullari keng tarqalganligi sababli, dasturning bir bajarilishidan boshqasiga o‘tish oson va testlarni o‘tkazganingizdan so‘ng tanlovingizni bir yoki bir nechta turli konteynerda amalga oshirib, tanlov qilishingiz mumkn.


Tartiblanmagan konteynerlarning sinflari xususiyatlari.

Headers






Members



unordered_ set


unordered_ multiset


unordered_ map


unordered_ multimap





constructor

unordered_ set


unordered_ multiset


unordered_ map


unordered_ multimap




destructor

~unordered_ set


~unordered_ multiset


~unordered_ map


~unordered_ multimap




assignment

operator=


operator=


operator=


operator=


iterators


begin



begin

begin

begin

begin

end

end

end

end

end

rbegin









rend









const iterators


cbegin

cbegin

cbegin

cbegin

cbegin

cend

cend

cend

cend

cend



crbegin









crend










capacity


size

size

size

size

size

max_size

max_size


max_size


max_size


max_size


empty






Nazorat savollari




  1. Qanday konteynerlar uchun aniqlanadigan tip va kalit tipi bir xil bo‘ladi?


  2. Assosiativ konteynerlarning iteratorlari necha tomonlama iteratorlar sinfiga kiradi?


  3. Kalit asosida qidirishda berilgan kichik bo‘lmagan birinchi elementni qanday funksiya va birinchi katta elementni qanday funksiya yordamida amalga oshiriladi?


  4. Set to‘plamda qiymatni o‘zgartirish uchun avval nima funksiyani bajarib, so‘ng yangi qiymatni yoki o‘zgartirilgan varianti qo‘shiladi?


  5. Xotirani ajratish va bo‘shatish operatorlari set sinfi uchun sanab bering?


  6. Ishorali butun tip, aniq tipni belgilash realizatsiya qilishga bog‘liq va Allocatorda aniqlanadi. Gap qaysi funksiya haqida.


  7. To‘plam - assosiativ konteynet bo‘lib, teng qiymatli kalitlarni saqlaydi (mumkin qadar bir kalit qiymatli elmentlar to‘plamini saqlaydi) va kalit orqali tez qidirish imkonini beradi. Gap qaysi to‘plam haqida bormoqda.


  8. set va multiset sinflarining obʻyektlarining tipi kalit bilan yonma-yon bitta shablonli



parametr olishi mumikn. Bu shablon qaysi funksiya?

12.[=] (operator=) operatorni nima uchun ishlatiladi?

  1. To‘plam va vektorning massivlarini tasodifiy sonlar bilan to‘ldiradigan va belgilangan qiymatni qidiradigan dastur tuzing.


  2. Pair qanday sinf va nima uchun kerak?


15.p.first – havola bo‘yicha juftlikning nechanchi elementiga murojaat? 16.Lug‘atda kalitlari unikal (takrorlanmaydigan) va qaysi sinfda bir nechta


nusxadagi kalitlari bo‘ladi.
  1. Oddiy map konreyner konstruktorlari: map ar; va map ar(Comp); ni ishlash tartibini tushuntirib bering.


  2. Ro‘yxatni initsializatsiya qilishda har bir juftlik alohida qanday qavs ichiga olinishi kerak.


  3. Lug‘atlarda elementlarga kirishning yana ikkita usuli mavjud (iteratorlar bilan ishlashdan tashqari). Birinchi va ikkinchi usularni tushuntirib bering.


  4. Indekslash funksiyasini assotsiativ konteyner sinflarning qaysi sinflariga foydalanish mumkin.


  5. at() funksiyasi istisno qaytargani uchun try - catch funksiyasi bilan boshqarish mumkinmi?


  6. operator[] noqulay va samarasiz deb hisoblasangiz, yana unga ikkita alternativ variantlar bor. Bu variantlarni ayting.


  7. Qaysi to‘plamda qidirish faqat birinchi maydon, yaʻni kalit maydon bilan amalga oshiriladi.


  8. Qanday konteynerlar xesh – jadval asosida qurilgan va xesh funksiyalarga va tenglik amaliga tayanadi.


  9. Ayrim vazifalarda saralash uchun vaqt ko‘p ajratilsa avtomatik saralashni muhim kamchilik deb hisoblash mumkin. Bunda dasturchi qanday yo‘l tutadi.


  10. Tartiblanmagan konteynerlarning xesh jadvallarida nima bor va ular cheksiz ko‘p elementlarni o‘z ichiga olishi mumkin.




http://fayllar.org
Yüklə 196,69 Kb.

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




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

    Ana səhifə