Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对std::pair的向量进行排序_C++_Sorting_Vector_Struct - Fatal编程技术网

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

C++ 对std::pair的向量进行排序,c++,sorting,vector,struct,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::vect

我需要定义一个用于向量排序的比较器函数:

   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;
    }
有人能建议如何解决这个问题吗?错误的原因是什么?
谢谢

cmp
是一个非静态成员函数。必须对某个对象调用它。要获取指向该成员函数的指针,您需要按照错误指示执行,
&Sched::cmp
,但随后需要将其绑定到类型为
Sched
†的某个对象

但是,
cmp
没有理由是非静态的,所以只需将其更改为:

static bool cmp(const OpSchedule& l,const OpSchedule& r)
{
  return l.second < r.second;
}
static bool-cmp(const-OpSchedule&l,const-OpSchedule&r)
{
返回l.second
然后你可以像现在这样通过考试


†您可以使用
std::bind(&Sched::cmp,this,std::placeholders::_1,std::placeholders::_2)
,将成员函数绑定到
this
cmp
是一个非
静态的
成员函数。必须对某个对象调用它。要获取指向该成员函数的指针,您需要按照错误指示执行,
&Sched::cmp
,但随后需要将其绑定到类型为
Sched
†的某个对象

但是,
cmp
没有理由是非静态的,所以只需将其更改为:

static bool cmp(const OpSchedule& l,const OpSchedule& r)
{
  return l.second < r.second;
}
static bool-cmp(const-OpSchedule&l,const-OpSchedule&r)
{
返回l.second
然后你可以像现在这样通过考试


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

,另一个选项是使cmp函数位于类的外部和命名空间内部,以便

    void genSched() 
    { 
       using namespace <classNmaespace>;
       std::sort(m_mappedOp.begin(),m_mappedOp.end(),cmp)
    }
void genSched()
{ 
使用名称空间;
排序(m_mappedOp.begin(),m_mappedOp.end(),cmp)
}

另一个选项是使cmp函数位于类外部和类的命名空间内部,以便

    void genSched() 
    { 
       using namespace <classNmaespace>;
       std::sort(m_mappedOp.begin(),m_mappedOp.end(),cmp)
    }
void genSched()
{ 
使用名称空间;
排序(m_mappedOp.begin(),m_mappedOp.end(),cmp)
}

@jogojapan关于你的答案:我认为,对于提问者(以及其他发现这个问题的人)来说,多个答案以不同的方式表达同一件事是很有用的。有时,读两遍能帮助他们理解。@是的..,但在这种情况下。。。我们的答案太相似了(我的答案快了6秒,只是因为我实际上忘记了在代码中包含单词
static
。@jogojapan关于你的答案:我认为对于提问者(以及其他发现这个问题的人)来说,多个答案以不同的方式表达同一件事是很有用的。有时,读两遍能帮助他们理解。@是的..,但在这种情况下。。。我们的答案太相似了(我的答案快了6秒,只是因为我实际上忘记了在代码中包含单词
static
),或者为什么有必要?在类中包含cmp函数的问题是,要访问cmp函数,排序方法必须创建一个对象来访问它。现在,如果CMP方法在全局范围内(像C函数),它可以用排序方法访问,而不需要对象。全局方法不是一个好主意。它破坏C++封装。所以它必须在类的名称空间内。所以代码应该类似于std::sort(m_mappedOp.begin(),m_mappedOp.end(),namespacename::cmp)你说的“类的名称空间”是什么意思?我假设你的类在名称空间内。示例名称空间计划{class xyz}您能解释一下名称空间机制在这里是如何工作的,或者为什么有必要这样做吗?在类中包含cmp函数的问题是,要访问cmp函数,排序方法必须创建一个对象来访问它。现在,如果CMP方法在全局范围内(像C函数),它可以用排序方法访问,而不需要对象。全局方法不是一个好主意。它破坏C++封装。所以它必须在类的名称空间内。所以代码应该类似于std::sort(m_mappedOp.begin(),m_mappedOp.end(),namespacename::cmp)你说的“类的名称空间”是什么意思?我假设你的类在名称空间内。示例命名空间计划{class xyz}