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 кітапханасында осы екі
операция негізінде автоматты түрде жасалады). Егер
Достарыңызбен бөлісу: