C++ 基于类外值的排序向量

C++ 基于类外值的排序向量,c++,sorting,C++,Sorting,我有一个std::vector,我的结构的简单版本如下所示: struct myStruct { glm::vec3 Position; }; std::sort(this->structVector.begin(), this->structVector.end(), this->sortFunction); 上述结构在类中声明: class myClass { private: struct myStruct {

我有一个
std::vector
,我的结构的简单版本如下所示:

struct myStruct {
    glm::vec3 Position;
};
std::sort(this->structVector.begin(), this->structVector.end(), this->sortFunction);
上述结构在类中声明:

class myClass {
    private:
        struct myStruct {
            glm::vec3 Position;
        };

    std::vector<myStruct> structVector;
    glm::vec3 outsidePosition;

};
其中
sortFunction
声明为:

GLboolean myClass::sortFunction(myStruct const &x, myStruct const& y)
{
    GLfloat dist1 = glm::length(this->outsidePosition - x.Position);
    GLfloat dist2 = glm::length(this->outsidePosition - y.Position);
    return dist1 < dist2;
}
GLboolean myClass::sortFunction(myStruct const&x,myStruct const&y)
{
GLfloat dist1=glm::长度(此->外侧位置-x.Position);
GLfloat dist2=glm::长度(此->外侧位置-y.Position);
返回dist1
但是我得到了一个编译错误,指出对于
std::sort
,没有重载方法。我哪里出了问题

错误:

错误C2672'std::sort':未找到匹配的重载函数


错误C3867'myClass::sortFunction':非标准语法;使用“&”创建一个指向成员的指针

我认为您的问题是,
std::sort
的三参数形式要求第三个参数是类,而
this->sortFunction
不是。用codemyClass/code中的
操作符的定义替换
sortFunction可能更简单-然后您可以简单地调用codestd::sort(this->structVector.begin(),this->structVector.end())

难道您不能使用映射而不是向量,关键是计算的距离吗,因此,排序将在插入值时自动完成。

std::sort
使用谓词来比较元素。
由于您的方法需要额外的信息,您必须以某种方式绑定它
lambda(通过捕获)是一个简单的方法:

std::sort(structVector.begin(),
          structVector.end(),
          [this](myStruct const &lhs, myStruct const& rhs)
          {
              return this->sortFunction(lhs, rhs);
          });

您是否使用标题#include?@HariomSingh是的,我可能重复了
std::sort(structVector.begin(),structVector.end(),[this](myStruct const&x,myStruct const&y){return sortFunction(x,y);}排序可以很好地处理函数,而不是成员函数
std::sort
需要一个可调用的参数作为其第三个参数。重载
操作符()
的类的实例是可调用函数的一种形式;还有其他的。