c++ - 对 std::pair 的 vector 进行排序

标签 c++ sorting vector 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;
    }

我得到编译错误:

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

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

最佳答案

cmp 是一个非static 成员函数。必须在某个对象上调用它。要获得指向该成员函数的指针,您需要按照错误提示 &Sched::cmp 进行操作,但随后您需要将其绑定(bind)到 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) 来绑定(bind)this 的成员函数。

关于c++ - 对 std::pair 的 vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15185579/

相关文章:

c++ - 在 IE 中 fork 或复制用户浏览器 session

c++ - 如何确定递归代码的Big-O?

c++ - 在访问存储在 vector<base*> 中的已知派生类对象时使用 dynamic_cast 或 static_cast 有什么问题?

c - 了解合并排序代码

r - 当向量很大时,如何获得 R 中向量的所有可能分区的列表?

c++ - 使用整数参数定义 vector <string> 时 '{' 和 '(' 之间的差异?

c++ - 查找数组中的哪两个值最大化给定表达式?

R 将一列升序排序,所有其他列降序(基于列顺序)

python - 如何在 pandas 数据框中找到每个月的 "n"最大值?

matlab - 在 MATLAB 中生成向量