std :: priority_queue различные сравнения - PullRequest
0 голосов
/ 19 марта 2012

Я хочу построить три различных priority_queue, которые содержат класс Thing, а затем отсортировать каждый по-разному по значениям, которые хранятся в Thing.Я знаю, что могу определить операторный метод либо внутренне, либо другом объекта, но есть ли способ заставить его использовать другой метод (ы) тестирования?Как мне сказать, чтобы использовать этот метод вместо метода оператора?И чем список параметров будет отличаться от перегрузки оператора?

Ответы [ 3 ]

2 голосов
/ 19 марта 2012

Как и большинство контейнеров STL, priority_queue принимает Класс сравнения в своих аргументах шаблона .

struct MyCompare1 {
  bool operator()(const Thing& t1, const Thing& t2) {
    // your logic here
  }
};

std::priority_queue<Thing, std::vector<Thing>, MyCompare1> my_queue;
0 голосов
/ 19 марта 2012

Вы можете указать свою функцию сравнения в качестве третьего параметра при определении priority_queue . Обратите внимание, что вторым параметром является базовый тип контейнера, обычно std::vector.

std::priority_queue<Thing> pq1;
std::priority_queue<Thing, std::vector<Thing>, std::greater<Thing> > pq2;
std::priority_queue<Thing, std::vector<Thing>, [your comparator here] > pq3;
0 голосов
/ 19 марта 2012

Вы можете передать пользовательский тип компаратора, который будет использоваться вместо значения по умолчанию.Это шаблонный параметр priority_queue.

...