Как я могу использовать функцию сравнения с более чем 2 аргументами с очередью приоритетов c ++? - PullRequest
3 голосов
/ 07 марта 2011

У меня есть класс объектов, в котором хранится запись базы данных.Существует также класс сравнения, который может принимать две из этих записей, и дополнительный объект, описывающий порядок упорядочения.Мне нужно использовать эти два класса с приоритетной очередью для объединения записей.Из того, что я могу сказать, я могу дать только функцию сравнения, которая принимает 2 аргумента в priority_queue.Как лучше всего использовать этот 3-аргументный компаратор с приоритетной очередью?

    priority_queue <Record, vector<Record>, Comparison(RecordA, RecordB, SortOrderObject)> pq;

Ответы [ 2 ]

6 голосов
/ 07 марта 2011

Создайте объект функции, содержащий дополнительную информацию, либо используя boost::bind, std::bind, либо вручную, затем передайте этот объект в очередь с приоритетами. Вот версия от руки:

class my_compare {
  SortOrder so;
  public:
  my_compare(const SortOrder& so): so(so) {}
  bool operator()(const Record& a, const Record& b) const {
    return comparison(a, b, so);
  }
};

Затем передайте my_compare в качестве аргумента шаблона в priority_queue и передайте my_compare(sort_order) в качестве компаратора в конструкторе очереди.

1 голос
/ 07 марта 2011

Одним способом было бы сделать Сравнение шаблоном, который принимает SortOrderObject в качестве параметра.

...