如何在c ++中使用STL排序来对类中的某些值进行排序?

Mor*_*ani 1 c++ sorting list

我有一个名为Graph的类,在这个类中我有一个名为V的成员,它是一个向量.我有一个名为Edge的结构和一个边缘列表.如下:

struct Edge{
 int u;
 int v;
 Edge(int u,int v){
   this->u=u;
   this->v=v;
 }
};
struct Vertex{
 int d;
 int f;
 .
 .
 .
}

class Graph{
  vector < Vertex > V;
  .
  .
  .
  int edgeCmp(Edge* x,Edge* y){
    return ( V[x->v].d < V[y->v].d )?1:0;
  }
  void someFunction(){
   list<Edge> backEdges;
   backEdges.sort(&Graph::edgeCmp);
  }
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用!! 也许有人帮我做这样的事情?我收到此错误:

错误3错误C2064:术语不评估为采用2个参数的函数c:\ program files\microsoft visual studio 9.0\vc\include\xutility 346

它无法理解我正在调用带有2个参数的函数.我不知道为什么.

ken*_*ytm 5

您不能使用成员函数作为比较器.成员函数需要this无法传递的指针sort.

相反,您必须创建一个函数对象以包含额外的信息,如:

class Graph{
  vector < Vertex > V;

  struct EdgeComparer {
     const vector<Vertex>& V;
     EdgeComparer(const vector<Vertex>& vertices) : V(vertices) {}
     bool operator() (const Edge& a, const Edge& b) const {
        return V[a.v].d < V[b.v].d;
     }
  };

  ...

  EdgeComparer ec (V);
  backEdges.sort(ec);
Run Code Online (Sandbox Code Playgroud)

请注意,由于您有一个列表Edge,而不是Edge*比较器的输入参数应该Edge*.我把那些改成了const Edge&.