Работа конструктора приоритетной очереди - PullRequest
0 голосов
/ 03 февраля 2020

Может ли кто-нибудь уточнить, как сравниваются объекты перед вставкой в ​​очередь приоритетов для следующего кода. Также, каково значение p (comp) в конструкторе очереди с приоритетами .. code -

#include<bits/stdc++.h>
using namespace std;

struct trainer
{  int a, int b;  }

bool comp(trainer x,trainer y)
{  return x.a>y.a;  }

int main(void)
{
  priority_queue<trainer, vector<trainer>, function<bool(trainer,trainer)> > p(comp);
  trainer x1,x2,x3;
  x1.a=2;x1.b=3;
  x2.a=9;x2.b=1;
  x3.a=21;x3.b=22;
  p.push(x2);p.push(x1);p.push(x3);
}

1 Ответ

0 голосов
/ 03 февраля 2020

Приоритетная очередь заказана. По умолчанию он использует std::less для упорядочения элементов, а самый большой элемент находится на первой позиции (вверху). Вы можете передать другую функцию сравнения, чтобы изменить порядок, например, std::greater, чтобы наименьший элемент находился в первой позиции. В вашем примере функция comp передается в конструктор очереди с приоритетами:

p(comp)

Когда вы вставляете элемент, он сравнивается с использованием comp в логарифмической c сложности времени с другими элементами и помещен в правильную позицию.

Вы можете прочитать std :: priority_queue для получения дополнительной информации.

...