class 中 priority_queue 对象的自定义比较器

Custom comparer for priority_queue object in a class

我有一个 class 结构类似于以下骨架代码。

class custom
{
private:
  struct info
  {
    // define some stuff
  };
  std::priority_queue<info, vector<info>, custom_comparer_t> pq;
}

我想知道是否有一个标准来定义这种情况下的 custom_comparer_t?最好是使用 lambda 函数、仿函数,还是重载 info 中的 <> 运算符?

std::priority_queue 模板参数根据 cppreference:

template<
    class T,
    class Container = std::vector<T>,
    class Compare = std::less<typename Container::value_type>
> class priority_queue;

std::priority_queueCompare模板参数必须满足Compare概念要求。 std::priority_queue 无法使用 T::operator()() 因为:

  1. 它会破坏其他 STL <algorithm> 函数。
  2. T 可以是 POD 类型或用户定义的类型,结果将是 std::priority_queue.
  3. 的复杂实现

当然,你可以为 Compare 使用仿函数:

class custom {
 private:
  struct info {
    // define some stuff
    bool operator()(info const&, info const&) const {
      return false;
    }
  };

 private:
  using custom_comparer_t = info;
  std::priority_queue<info, std::vector<info>, custom_comparer_t> pq;
};