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

Sort vector based on value outside of class

本文关键字:向量 排序      更新时间:2023-10-16

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

struct myStruct {
glm::vec3 Position;
};

上面的结构在一个类中声明:

class myClass {
private:
struct myStruct {
glm::vec3 Position;
};
std::vector<myStruct> structVector;
glm::vec3 outsidePosition;
};

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

我试过使用这样的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

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

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

您不能使用地图而不是矢量,键是计算的距离,因此在插入值时会自动进行排序吗?

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