Программалау оқулық Алматы, 012 Қазақстан Республикасы Білім жəне ғылым министрлігінің «Оқулық»



Pdf көрінісі
бет461/642
Дата30.03.2022
өлшемі3,66 Mb.
#29231
түріПрограмма
1   ...   457   458   459   460   461   462   463   464   ...   642
Байланысты:
pavlovskaia-jogargy-dengeili

template ,

 

class Compare=less

class priority_queue { 

 protected: 

 

   Container c; 

 

   Compare comp; 

 public:

 

   explicit priority_queue(const Compare& x = Compare(),

 

 

const Container& = Container()); 

      template  

         priority_queue(InputIter fi rst, InputIter last,

         const Compare& x = Compare(),   

         const Container& = Container()); 

 

 

bool empty() const           {return c.empty();}

 

 

size_type size() const       {return c.size();}

 

 

const value_type& top() const {return c.front();} 

 

 

void push(const value_type& x); 

  

void 

pop();

};

Басымдылықтары бірдей элементтер үшін басымдылықтары бар кезек 

қарапайым кезек  болып табылады. Стектер ортасындағы сияқты, мұнда да 

негізгі əдістерге 



push



pop

 жəне 

top

 əдістері жатады. 

Қарапайым мысал:

#include  

#include  

#include  

#include  

using namespace std; 

int main(){

 

priority_queue , less > P; 

   int x;

   P.push(l3); P.push(5l); P.push(200); P.push(l7);  

   while (!P.empty()){

 

   x = P.top(); 

 

   cout << x << " элементі таңдалды" << endl; 

 

   P.pop();

 

}

}



340

Программа жұмысының нəтижесі:



200 элементі таңдалды 

5l элементі таңдалды

l7 элементі таңдалды 

l3 элементі таңдалды

Бұл мысалда шаблонның үшінші параметрі 



 тақырыптық 

файлында («Функционалдық объектілер» бөлімін, 363 б. қараңыз) анықталған 

шаблон болып табылады. Ол «кіші» екендігін тексеретін салыстыру опе-

рациясын береді. Стандартты 

greater<тип>



greater_equal<тип>



less_equal<тип>

 шаблондарын беруге болады. Егер кезектен таңдаудың 

басқа бір реттілігін анықтау қажет болса, онда өзіндік функционалды объект 

енгізіледі. Төменде берілген мысалда таңдау сан цифрларының ең кіші 

қосындысы бойынша орындалады:

#include  

#include  

#include  

#include  

using namespace std; 

class CompareSum{ 

 public:

 

   bool operator()(int x, int y){ 

 

int sx = 0, sy = 0; 

 

while (x){sx += x % l0; x /= l0;} 

   while (y){sy += y % l0; y/=l0;} 

   return sx > sy ;

 

   }

};

int main(){

 

priority_queue , CompareSum > P; int x;

 

P.push(l3); P.push(5l); P.push(200); P.push(l7); 

   while  

(!P.empty()){

 

   x = P.top(); 

 

   cout << x << " элементі таңдалды" << endl; 

 

   P.pop();

 

}

}

Программа жұмысының нəтижесі:



200 элементі таңдалды 

l3 элементі таңдалды

5l элементі таңдалды

l7 элементі таңдалды


341

Ассоциативті контейнерлер

Жоғарыда көрсетілгендей, ассоциативті контейнерлер, көбінесе теңдес-

тірілген іздеу бұтақтарының негізінде құрылуының арқасында мəліметтерге 

жылдам қол жеткізуді қамтамасыз етеді (контейнердің жүзеге асырылуы емес, 

тек оның интерфейсі ғана стандартқа сəйкес анықталады).

Ассоциативті контейнерлердің бес типі бар, олар: сөздіктер (



map

), дубли-

катты сөздіктер (

multimap

), жиындар (



set

), дубликатты жиындар (



multiset

жəне биттік жиындар (



bitset

). Сөздіктерді 



ассоциативті жиымдар немесе 

бейнелер деп те атайды. 

Сөздік жұпталған мəндер негізінде құрылады, жұптардың алғашқысы 

элементті анықтауға арналған кілт, ал екіншісі – элементтің өзі болып та-

былады. Кілт элементпен ассоциацияланған (байланысқан) деп айтуға бо-

лады, контейнерлердің бұлай аталуы да осыған орай қалыптасқан. Мысалы, 

ағылшын-қазақ сөздігінде кілт ретінде ағылшын сөзі, ал элемент ретінде 

қазақ сөзі алынады. Қарапайым жиымды да сөздік ретінде қарастыруға бола-

ды, мұндағы кілттің рөлін элементтің нөмірі атқарады. STL кітапханасында 

сипатталған сөздіктерде кілт ретінде кездейсоқ типтегі мəн қолданылуы 

мүмкін. Ассоциативті контейнерлер 



 жəне 


 тақырыптық файлда-

рында сипатталған.

«Кілт–элемент» жұбын сақтау үшін 



 тақырыптық файлында 

сипатталған 

pair

 шаблоны қолданылады:



template struct pair{ 

 

typedef T1 fi rst_type; 

 

typedef T2 second_type; 

 T1 

fi rst; 

 T2 

second; 

 pair();

 

pair(const T1& x, const T2& y); 

 

template pair(const pair &p);

};

pair

 шаблонының екі параметрі бар, олар жұп элементтерінің типтерін 

көрсетеді. Бірінші элементтің атауы – 

fi rst

, екіншісінің атауы – 



second

. Екі 


конструктор анықталған: біріншісі элементтерді инициалдау үшін екі мəнді 

қабылдауы керек, екіншісі (көшіру конструкторы) – басқа жұпқа сілтемені 

қабылдауы тиіс. Жұптың келісім бойынша анықталған конструкторы жоқ, 

яғни объектіні құру кезінде оған мəнді нақты түрде меншіктеу керек.

Жұптар үшін теңдікке тексеру жəне кіші екендігін салыстыру операциясы 

анықталған (басқа барлық қатынас операциялары STL кітапханасында осы екі 

операция негізінде автоматты түрде жасалады). Егер 



Достарыңызбен бөлісу:
1   ...   457   458   459   460   461   462   463   464   ...   642




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет