STL算法中排序函数的问题

时间:2010-01-31 18:12:38

标签: c++ stl

我写了几行:

#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:错误:没有匹配函数用于调用toort(__ gnu_cxx :: __ normal_iterator *,std :: vector,std :: allocator&gt;&gt;&gt ;,__gnu_cxx :: __ normal_iterator *,std: :vector,std :: allocator&gt;&gt;&gt;,未解析的重载函数类型)'

我不知道它是什么类型的问题......你能帮助我吗?

感谢您的帮助...

2 个答案:

答案 0 :(得分:7)

criterio是一个模板,所以你需要给它模板上的类型:

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

并且标准函数必须将const引用作为参数:

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

答案 1 :(得分:2)

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

您需要明确说明您正在使用的功能。