根据类外的值对矢量进行排序

时间:2017-08-18 03:18:25

标签: c++ sorting

我有std::vector<myStruct>,我的结构的简单版本看起来像这样:

struct myStruct {
    glm::vec3 Position;
};

上面的结构在类中声明:

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

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

};

但我遇到的问题是如何根据structVectorstructVector.Position之间的距离对outsidePosition进行排序。

我尝试使用std::sort这样:

std::sort(this->structVector.begin(), this->structVector.end(), this->sortFunction);

其中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;
}

但是我收到一个编译错误,指出std::sort没有重载方法。我在哪里错了?

错误:

Error C2672 'std::sort': no matching overloaded function found

Error C3867 'myClass::sortFunction': non-standard syntax; use '&' to create a pointer to member

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:-1)

你不能使用地图而不是矢量,键是计算的距离,所以排序会在插入值时自动完成吗?

答案 2 :(得分:-3)

我认为你的问题是这个三参数形式的std::sort期望第三个参数是一个类,this->sortFunction不是。使用sortFunction<运算符的定义替换myClass可能更为直接 - 然后您只需调用std::sort(this->structVector.begin(), this->structVector.end())