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



Pdf көрінісі
бет312/465
Дата09.01.2023
өлшемі3,66 Mb.
#60709
түріПрограмма
1   ...   308   309   310   311   312   313   314   315   ...   465
Байланысты:
аибм сплюс

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; 


Достарыңызбен бөлісу:
1   ...   308   309   310   311   312   313   314   315   ...   465




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

    Басты бет