按整数排序结构的向量

时间:2015-07-21 09:08:34

标签: c++

我试图对结构的矢量进行排序。我看到了thisthis个例子。

这是我的代码:

.h文件:

// I didn't mention all the includes and namespace
class fileLoader
{
 struct commands
  {
    int time;
    string name;
  };
 commands resultStruct;
 vector<commands> resultVector

  private:
     void sortFunction();
     bool compareByTime(const commands &a, const commands &b);
}

.cpp文件:

void fileLoader::sortResults()
{
    sort(resultVector.begin(), resultVector.end(), compareByTime);
}

bool fileLoader::compareByTime(const commands &a, const commands &b)
{
    return a.time < b.time;
}

这是我得到的编译错误:

error C3867: 'fileLoader::compareByTime': function call missing argument list; use '&fileLoader::compareByTime' to create a pointer to member
error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided
c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(3639) : see declaration of 'std::sort'

当我尝试将compareByTime更改为&fileLoader::compareByTime时,我收到了此编译错误:

    error C2064: term does not evaluate to a function taking 2 arguments
    1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(3776) : see reference to function template instantiation 'std::pair<_Ty1,_Ty2> std::_Unguarded_partition<_RanIt,_Pr>(_RanIt,_RanIt,_Pr)' being compiled
    1>          with
    1>          [
    1>              _Ty1=fileLoader::commands *,
    1>              _Ty2=fileLoader::commands *,
    1>              _RanIt=fileLoader::commands *,
    1>              _Pr=bool (__thiscall fileLoader::* )(const fileLoader::commands &,const fileLoader::commands &)
    1>          ]
    1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(3806) : see reference to function template instantiation 'void std::_Sort<fileLoader::commands*,__w64 int,_Pr>(_RanIt,_RanIt,_Diff,_Pr)' being compiled
    1>          with
    1>          [
    1>              _Pr=bool (__thiscall fileLoader::* )(const fileLoader::commands &,const fileLoader::commands &),
    1>              _RanIt=fileLoader::commands *,
    1>              _Diff=__w64 int
    1>          ]
   std::sort<std::_Vector_iterator<_Myvec>,bool(__thiscall fileLoader::* )(const fileLoader::commands &,const fileLoader::commands &)>(_RanIt,_RanIt,_Pr)' being compiled
    1>          with
    1>          [
    1>              _Myvec=std::_Vector_val<fileLoader::commands,std::allocator<fileLoader::commands>>,
    1>              _RanIt=std::_Vector_iterator<std::_Vector_val<fileLoader::commands,std::allocator<fileLoader::commands>>>,
    1>              _Pr=bool (__thiscall fileLoader::* )(const fileLoader::commands &,const fileLoader::commands &)
    1>          ]
    1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(3720): fatal error C1903: unable to recover from previous error(s); stopping compilation
    1>
    1>Build FAILED.

我很乐意提供一些帮助。

感谢。

2 个答案:

答案 0 :(得分:1)

首先修复所有拼写错误(缺少分号等)。

然后将排序功能更改为static bool compareByTime(const commands &a, const commands &b);

答案 1 :(得分:0)

简短回答

制作compareByTime static(或“全局”课外)

<强>解释

成员函数要求this以某种方式传递给它们,因此两个参数成员函数可能是3个参数函数。所以编译器在需要2个参数比较器时不能使用它。