проблема с функцией сортировки в алгоритме STL - PullRequest
2 голосов
/ 31 января 2010

Я написал эти несколько строк:

#include <vector>
#include <algorithm>
#include <stdlib.h>
#include <time.h>
using namespace std;

template <class T> struct First
{
    T num;

    First() {}

    First(const T &a) : num(a) {}
};

 template <typename var> bool criterio(First<var> &primo, First<var> &secondo)
 {
    return (primo.num < secondo.num);
 }

int main()
 {
    vector< First<int> > f;

    srand (time(NULL));
    for(int i=0; i<20; i++) f.push_back( First<int>(rand() % 20) );

    sort(f.begin(),f.end(),criterio);

    return 0;
 }

Я компилирую с "g ++ program2.C" и отвечаю:

program2.C: в функции int main () ’:

program2.C: 28: ошибка: отсутствует функция сопоставления для вызова сортировки (__ gnu_cxx :: __ normal_iterator *, std :: vector, std :: allocator>>>, __gnu_cxx :: __ normal_iterator *, std :: vector, std :: allocator>>>, неразрешенный тип перегруженной функции) '

Понятия не имею, что это за проблема ... Вы можете мне помочь ??

спасибо за помощь ...

Ответы [ 2 ]

7 голосов
/ 31 января 2010

Критерий - это шаблон, поэтому вам нужно указать тип, для которого он создан:

   sort(f.begin(),f.end(),criterio<int>)

и функция критерия должна принимать константные ссылки в качестве параметров:

 template <typename var> bool criterio(const First<var> &primo, 
                                         const First<var> &secondo)
  {
     return (primo.num < secondo.num);
  }
2 голосов
/ 31 января 2010
sort(f.begin(),f.end(),criterio<int>);

Вам нужно явно указать функцию, которую вы используете.

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