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

C++ stl::sort()中的比较函数,c++,stl,C++,Stl,您已经定义了节点*的std::vector。因此,所有元素都是node*,向量执行的所有操作都将在node*。你不能给sort一个不同类型的比较函数。原因是你的向量包含node*类型的值,所以比较函数需要比较node*类型的值。你可能首先想说的是vector。如果您想要指向节点的指针,那么第二个比较函数是合理的。究竟是什么奇怪的错误?@gtk.pro:我冒昧地重构并整理了格式,清理了这些方法。@Matthieu:毫无疑问,你让代码变得更好了,但我想如果你让代码保持原样,并将重构作为一个答案来发布

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

原因是你的向量包含node*类型的值,所以比较函数需要比较node*类型的值。

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

究竟是什么奇怪的错误?@gtk.pro:我冒昧地重构并整理了格式,清理了这些方法。@Matthieu:毫无疑问,你让代码变得更好了,但我想如果你让代码保持原样,并将重构作为一个答案来发布,会更好。是的,脱离主题,但这样的更正是普遍接受的。这让你有机会解释为什么要进行重构。@Konrad:true。。。但是,其他人可能不得不艰难地通过它,而我今晚很懒,“周末效应”。@Matthieu M:你把我和你的格式化搞混了,断言函数是什么意思。但是我听说在函数定义中使用type&a,你不必在函数中的每个地方都使用*a,你可以简单地使用与*a@gkt字体恐怕你听错了!虽然引用和指针的用途相当相似,但它们是不能互换的。请看一看我在问题末尾添加的新程序。@gkt:我不确定我是否理解这个新程序与任何事情都有什么关系!
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);
bool comp2(node* a,node* b){
  assert(a && b && "comp2 - null argument");
  if(a->value < b->value){ return true; }
  return false;
}
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;
}