对std :: pair的向量进行排序

Yak*_*kov 1 c++ sorting struct vector

我需要为矢量排序定义一个比较器函数:

   class Sched
    {
    public:
    struct Op
    {
      // some data
    };
    typedef std::pair<Op*,Clk> OpSchedule;
    void genSched() { std::sort(m_mappedOp.begin(),m_mappedOp.end(),cmp)}

    private:
    std::vector<OpSchedule> m_mappedOp;
    bool cmp(const OpSchedule& l,const OpSchedule& r)
    {
      return l.second< r.second;
    }
Run Code Online (Sandbox Code Playgroud)

我收到编译错误:

function call missing argument list; use '&Sched::cmp' to create a pointer to member.
Run Code Online (Sandbox Code Playgroud)

有人可以建议如何解决这个错误的原因是什么?谢谢

Jos*_*eld 6

cmp是非static会员职能.必须在某个对象上调用它.要获得指向该成员函数的指针,您需要按照错误所述进行操作&Sched::cmp,但是您需要将其绑定到类型Sched†的某个对象.

然而,没有任何理由cmp将非static所以才改成这样:

static bool cmp(const OpSchedule& l,const OpSchedule& r)
{
  return l.second < r.second;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像现在一样传递它.

†你可以用std::bind(&Sched::cmp, this, std::placeholders::_1, std::placeholders::_2),绑定成员函数this.