За да използва C ++ priority_queue, програмата трябва да започне с код като:
#include#include
използване на пространство от имена std;
Той включва библиотеката на опашките в програмата.
За да продължи да чете, читателят трябваше да има основни познания по C++.
Съдържание на статията
- Въведение - вижте по-горе
- Основна конструкция
- Важни функции на членовете
- Други функции за приоритетна опашка
- Низови данни
- Други конструкции на приоритетни опашки
- Заключение
Основна конструкция
Структурата на данните трябва да се изгради първо, преди да може да се използва. Конструкцията тук означава създаване на екземпляр на обект от класа на опашката на библиотеката. След това обектът на опашката трябва да има име, дадено му от програмиста. Най-простият синтаксис за създаване на приоритетна опашка е:
приоритетна_чертаС този синтаксис първо се премахва най-голямата стойност. Пример за екземпляра е:
приоритетна_чертаили
приоритетна_чертаВекторът и deque са две структури от данни в C++. С всеки от тях може да се създаде приоритетна_опашка. Синтаксисът за създаване на приоритетна опашка от векторната структура е:
приоритетна_чертаПример за тази инстанция е:
приоритетна_чертаЗабележете разликата между> и> в края на декларацията. Това е, за да се предотврати объркване с >>. Кодът за сравнение по подразбиране е „по-малко
Ако първо се премахва най-малката стойност, тогава изразът трябва да бъде:
приоритетна_чертаВажни функции на членовете
Функцията push ()
Тази функция изтласква стойност, която е нейният аргумент, в приоритетната_черта. Връща се празно. Следният код илюстрира това:
pq.тласък (10);
pq.тласък (30);
pq.тласък (20);
pq.тласък (50);
pq.тласък (40);
Тази приоритетна_черта е получила 5 целочислени стойности от порядъка на 10, 30, 20, 50, 40. Ако всички тези елементи трябва да бъдат извадени от приоритетната опашка, те ще излязат в порядъка на 50, 40, 30, 20, 10.
Функцията pop ()
Тази функция премахва от prior_queue стойността с най-висок приоритет. Ако кодът за сравнение е „по-голям
pq.натиснете ('a'); pq.натиснете ('c'); pq.натиснете ('b'); pq.натиснете ('e'); pq.натиснете ('d');
Обърнете внимание, че за да се извика функция член, името на обекта трябва да бъде последвано от точка и след това функцията.
Най-горната () функция
The поп () функция премахва следващата стойност с най-висок приоритет, но не я връща като поп () е функция празнота. Използвай Горна част() функция, за да се знае стойността на най-високия приоритет, която трябва да бъде премахната следващата. The Горна част() функция връща копие на стойността с най-висок приоритет в приоритетната_черта. Следният код, където следващата стойност с най-висок приоритет е най-малката стойност, илюстрира това
pq.натиснете ('a'); pq.натиснете ('c'); pq.натиснете ('b'); pq.натиснете ('e'); pq.бутон ('d');
char ch1 = pq.Горна част(); pq.поп ();
char ch2 = pq.Горна част(); pq.поп ();
char ch3 = pq.Горна част(); pq.поп ();
char ch4 = pq.Горна част(); pq.поп ();
char ch5 = pq.Горна част(); pq.поп ();
Cout<
Функцията празен ()
Ако програмист използва Горна част() функция на празна приоритетна_черта, след успешната компилация той ще получи съобщение за грешка като:
Така че, винаги проверявайте дали приоритетната опашка не е празна, преди да използвате Горна част() функция. The празен () член-функция връща bool, true, ако опашката е празна, и false, ако опашката не е празна. Следният код илюстрира това:
приоритетна_чертаint i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.натискане (i1); pq.натискане (i2); pq.натискане (i3); pq.натискане (i4); pq.натискане (i5);
докато(!pq.празен ())
Cout << pq.top() << ";
pq.поп ();
Cout << '\n';
Други функции за приоритетна опашка
Функция за размер ()
Тази функция връща дължината на приоритетната опашка, както илюстрира следният код:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq.натискане (i1); pq.натискане (i2); pq.натискане (i3); pq.натискане (i4); pq.натискане (i5);
int len = pq.размер ();
Cout << len << '\n';
Изходът е 5.
Функцията за размяна ()
Ако две приоритетни_опашки са от един и същи тип и размер, тогава те могат да бъдат заменени от тази функция, както показва следният код:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.натискане (i1); pq1.натискане (i2); pq1.натискане (i3); pq1.натискане (i4); pq1.натискане (i5);
приоритетна_черта
int it1 = 1; int it2 = 3; int it3 = 2; int it4 = 5; int it5 = 4;
pqA.натиснете (it1); pqA.натиснете (it2); pqA.натиснете (it3); pqA.натиснете (it4); pqA.натиснете (it5);
pq1.суап (pqA);
докато(!pq1.празен ())
Cout << pq1.top() << ";
pq1.поп ();
cout<<'\n';
докато(!pqA.празен ())
Cout << pqA.top() << ";
pqA.поп ();
cout<<'\n';
Резултатът е:
5 4 3 2 1
50 40 30 20 10
The emplace () Fuction
The emplace () функция е подобна на функцията за натискане. Следният код илюстрира това:
int i1 = 10; int i2 = 30; int i3 = 20; int i4 = 50; int i5 = 40;
pq1.emplace (i1); pq1.emplace (i2); pq1.emplace (i3); pq1.emplace (i4); pq1.emplace (i5);
докато(!pq1.празен ())
Cout << pq1.top() << ";
pq1.поп ();
cout<<'\n';
Резултатът е:
50 40 30 20 10
Низови данни
Когато се сравняват низовете, трябва да се използва класът на низовете, а не директното използване на низовите литерали, защото той ще сравнява указателите, а не действителните низове. Следният код показва как се използва низовият клас:
#includeприоритетна_черта
низ s1 = низ ("писалка"), s2 = низ ("молив"), s3 = низ ("тетрадка"), s4 = низ ("текстова книга"), s5 = низ ("владетел");
pq1.натискане (s1); pq1.натискане (s2); pq1.натискане (s3); pq1.натискане (s4); pq1.натискане (s5);
докато(!pq1.празен ())
Cout << pq1.top() << " ";
pq1.поп ();
cout<<'\n';
Резултатът е:
учебник владетел молив химикалка тетрадка
Други конструкции с приоритетна опашка
Изрично създаване от вектор
Приоритетна опашка може да бъде създадена изрично от вектор, както показва следният код:
вектор
приоритетна_черта
докато(!pq.празен ())
Cout << pq.top() << ";
pq.поп ();
cout<<'\n';
Резултатът е: 50 40 30 20 10. Този път трябва да бъде включен и заглавният вектор. Аргументите за функцията конструктор вземат началните и крайните указатели на вектора. Типът данни за вектора и типът данни за приоритетната_черта трябва да бъдат еднакви.
За да направи приоритет най-малкото значение, декларацията за конструктора ще бъде:
приоритетна_чертаИзрично създаване от масив
Опашка с приоритет може да бъде създадена изрично от масив, както показва следният код:
приоритетна_черта
докато(!pq.празен ())
Cout << pq.top() << ";
pq.поп ();
cout<<'\n';
Резултатът е: 50 40 30 20 10. Аргументите за функцията конструктор вземат началните и крайните указатели на масива. arr връща началния указател, “arr + 5” връща показалеца точно покрай масива, а 5 е размерът на масива. Типът данни за масива и типът данни за приоритетната_черта трябва да бъдат еднакви.
За да направи приоритет най-малкото значение, декларацията за конструктора ще бъде:
приоритетна_чертаЗабележка: В C ++ приоритетната_черта всъщност се нарича адаптер, а не просто контейнер.
Персонализиран код за сравнение
Наличието на всички стойности в приоритетната опашка възходящо или всички низходящи не е единствената опция за приоритетната опашка. Например списък с 11 цели числа за максимална купчина е:
88, 86, 87, 84, 82, 79,74, 80, 81,,, 64, 69
Най-високата стойност е 88. Следват две числа: 86 и 87, които са по-малко от 88. Останалите числа са по-малко от тези три числа, но всъщност не са в ред. В списъка има две празни клетки. Числата 84 и 82 са по-малки от 86. Числата 79 и 74 са по-малки от 87. Числата 80 и 81 са по-малко от 84. Числата 64 и 69 са по-малко от 79.
Разполагането на числата следва критериите за максимална купчина - вижте по-късно. За да осигури такава схема за приоритетната_черта, програмистът трябва да предостави свой собствен код за сравнение - вижте по-късно.
Заключение
C ++ priority_queue е опашка първо в първото излизане. Функцията член, натиснете (), добавя нова стойност към опашката. Функцията член, Горна част(), чете най-горната стойност в опашката. Функцията член, поп (), премахва, без да връща най-високата стойност на опашката. Функцията член, празен (), проверява дали опашката е празна. Въпреки това, приоритетната_черта се различава от опашката, по това, че следва някакъв приоритетен алгоритъм. То може да бъде най-голямо, от първо до последно или най-малкото, от първо до последно. Критериите (алгоритъмът) също могат да бъдат дефинирани от програмист.