如何使用带有c ++优先级队列的2个以上参数的比较函数?

Jam*_*mes 3 c++ priority-queue

我有一个存储数据库记录的对象类.还有一个比较类可以接收其中两个记录,另外一个对象描述了如何进行排序.我需要使用这两个具有优先级队列的类来合并记录.据我所知,我只能给一个带有2个参数的比较函数到priority_queue.将这个3参数比较器与优先级队列一起使用的最佳方法是什么?

    priority_queue <Record, vector<Record>, Comparison(RecordA, RecordB, SortOrderObject)> pq;
Run Code Online (Sandbox Code Playgroud)

Jer*_*ock 6

使含有功能对象的额外信息,或者使用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);
  }
};
Run Code Online (Sandbox Code Playgroud)

然后my_compare作为模板参数priority_queue传递给,并my_compare(sort_order)作为队列构造函数中的比较器传递.

  • 对象的函数定义被编码为其类型(即,调用是已知的,命名函数,而不是函数指针),允许调用内联和类似的事情. (2认同)