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

时间:2013-03-03 12:21:09

标签: c++ sorting vector struct

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

   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;
    }

我收到编译错误:

function call missing argument list; use '&Sched::cmp' to create a pointer to member.

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

2 个答案:

答案 0 :(得分:6)

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

但是,cmp没有理由不是static所以只需将其更改为:

static bool cmp(const OpSchedule& l,const OpSchedule& r)
{
  return l.second < r.second;
}

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

†您可以使用std::bind(&Sched::cmp, this, std::placeholders::_1, std::placeholders::_2)执行该操作,将成员函数绑定到this

答案 1 :(得分:1)

另一种选择是将cmp函数放在类之外和类的命名空间内,以便

    void genSched() 
    { 
       using namespace <classNmaespace>;
       std::sort(m_mappedOp.begin(),m_mappedOp.end(),cmp)
    }