Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 [ 141 ] 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239

Как видите, после вставки значений 66.6, 22.2 и 44.4 программа считает старшими элементами 66.6 и 44.4. После вставки еще трех элементов приоритетная очередь содержит значения 22.2, 11.1, 55.5 и 33.3 (в порядке вставки). Следующий элемент просто удаляется вызовом рор(), поэтому итоговый цикл выводит значения 33,3, 22.2 и 11.1 именно в этом порядке.

;троение класса priority queue

Типичная реализация класса priority queue<>, как и реализации классов stacko и queueo, понятна без комментариев:

namespace std {

template <cla5s Т. class Container = vector<T>.

class Compare = less<typename Container:-.value type> > class pr1ority queue { public:

typedef typename Container::value type value type:

typedef typename Container:;size type size type;

typedef Container container type;

protected:

Compare comp: Критерий сортировки

Container c: Контейнер public:

Конструкторы

explicit priority queue(con5t Compares cmp « CompareO,

const Containers = ContainerO)

: comp(cmp), cCcont) {

make heap(c.begin().с.end().comp);

void pushCconst value type& x) { c.push backCx);

push heap(c.begin().c.endC).comp):

void pope) {

pop heap(c.beginO.c.end().comp): c.pop back():

bool emptyO const { return c.emptyO: }

s1ze type SizeO const { return c.sizeO: )

const value type& topC) const { return c.frontO: )

Как видно из приведенного листинга, приоритетная очередь использует алгоритмы STL для работы с кучей, описанные на с. 396. В отличие от других контейнерных адаптеров для приоритетной очереди не определены операторы сравнения.

Ниже приводятся более подробные описания членов класса priority queue<>.



Определения типов

приоритетная очередь val ue type

О Тип элементов. О Эквивалент:

ноитейиер::value type

приоритетнаяочередь::size type

О Беззнаковый целый тип для значений размера. О Эквивалент:

контейнер: :size type

приоритетная очередь::container type Тип контейнера.

Конструкторы

приоритетная очередь: :priority queue С)

О Конструктор по умолчанию,

О Создает пустую приоритетную очередь.

explicit приоритетная очередь: :\)nority queue Cconst CompFuncS op)

О Создает пустую приоритетную очередь с критерием сортировки ор.

О Примеры передачи критерия сортировки в аргументах конструктора приведены на с. 198 и 218.

приоритетная очередь: :pnonty queue (const CorfipFunc& op.

const Containers cont)

О Создает приоритетную очередь с критерием сортировки ор и инициализирует ее элементами cont

О Данная функция объявлена как шаблонная (см. с. 28), поэтому элементы исходного интервала могут относиться к любому типу, который преобразуется к типу элементов контейнера.

приоритетиая очередь\ :pnonty q\jieue (Inputlterator beg.

Inputlterator end)

О Создаст приоритетную очередь с критерием сортировки ор и инициализирует ее элементами интервала [beg,end).

О Данная функция объявлена как шаблонная (см. с. 28), поэтому элементы исходного интервала могут относиться к любому типу, который преобразуется к типу элементов контейнера.



приоритетндя очврвдь: :\)nontyj\[j.eue (Inputlterator beg. Inputlterator end.

const CompFuncS op)

О Создает приоритетную очередь с критерием сортировки ор и инициализирует ее элементами интервала [beg,end).

О Данная функция объявлена как шаблонная (см. с. 28), поэтому элементы исходного интервала могут относиться к любому типу, который преобразуется к типу элементов контейнера.

О Примеры передачи критерия сортировки в аргументах конструктора приведены на с. 198 и 218.

приоритетная очередь: :{>riorityj][ieue (Inputlterator beg. Inputlterator end.

const CompFuncS op. const Containers cont)

О Создает приоритетную очередь с критерием сортировки ор и инициализирует ее элементами контейнера cont и интервала [heg,end).

О Данная функция объявлена как шаблонная (см. с. 28), поэтому элементы исходного интервала могут относиться к любому типу, который преобразуется к типу элементов контейнера.

Другие операции

size type приоритетная очередь: .s-yze () const О Возвращает текущее количество элементов.

О Для проверки отсутствия элементов в приоритетной очереди рекомендуется использовать функцию empty(), поскольку она может работать быстрее.

bool приоритетная очередь:-.empty () const

О Проверяет, пуста ли приоритетная очередь. О Эквивалент (но может работать быстрее):

приоритетная очередь: :size()==0

void приоритетная очередь: -.pusb (const value type&. elem)

Вставляет копию elem в приоритетную очередь, const valuej:ype& приоритетная очередь: -.top О const

О Возвращает следующий элемент приоритетной очереди (то есть элемент с наибольшим значением среди всех элементов очереди). Если приоритетная очередь содержит сразу несколько элементов с таким значением, критерий выбора определяется реализацией.

О Перед вызовом необходимо убедиться в том, что приоритетная очередь содержит хотя бы один элемент (size()>0), иначе вызов приводит к непредсказуемым последствиям.



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 [ 141 ] 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239