функция сравнения в stl :: sort () - PullRequest
0 голосов
/ 15 января 2011
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;
}

Есть ли какое-либо объяснение этому?

ОШИБКА: /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 ]

5 голосов
/ 15 января 2011

Вы определили std::vector из node *. Следовательно, все элементы равны node *, и все операции, которые выполняет вектор, будут на node *. Вы не можете дать sort функцию сравнения другого типа.

3 голосов
/ 15 января 2011

То, что вы, вероятно, хотели сказать в первую очередь, было vector<node>.Если вам нужны указатели на узлы, тогда вторая функция сравнения является разумной.

3 голосов
/ 15 января 2011

Рационально, что ваш вектор содержит значения типа node*, поэтому функции сравнения должны сравнивать значения типа node*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...