stl :: sort()中的比较函数

时间:2011-01-15 18:07:06

标签: c++ stl

class node{
public:
  unsigned long long int value;
  int index;
};


bool comp2(node& a,node& b){
  if(a.value < b.value) { return true; }
  return false;
}

vector <node*>llist,rlist;
sort(llist.begin(),llist.end(),comp2);

上面的代码给了我一些在某些其他行(后面的代码中)的错误,但是当我将comp2函数更改为跟随所有错误消失时。

bool comp2(node* a,node* b){
  assert(a && b && "comp2 - null argument");
  if(a->value < b->value){ return true; }
  return false;
}

有什么理由吗?

ERROR:/usr/include/c++/4.4/bits/stl_algo.h|124|error: invalid initialization of reference of type ‘node&’ from expression of type ‘node* const’|

如果这个(下面的)工作,那么上面也应该工作

using namespace std;

void rep(int& a,int& b){

int c;
c=a;
a=b;
b=c;

}

int main(void){

int a=3,b=4;

rep(a,b);
cout<<a<<" "<<b;
return 0;
}

3 个答案:

答案 0 :(得分:5)

您已定义std::vector node *。因此,所有元素都是node *,向量执行的所有操作都将在node *上。你不能给sort一个不同类型的比较函数。

答案 1 :(得分:3)

理性的是,您的向量包含node*类型的值,因此比较函数需要比较node*类型的值。

答案 2 :(得分:3)

首先你想说的是vector<node>。如果你想要指向节点的指针,那么第二个比较函数是合理的。