我有std::vector<myStruct>
,我的结构的简单版本看起来像这样:
struct myStruct {
glm::vec3 Position;
};
上面的结构在类中声明:
class myClass {
private:
struct myStruct {
glm::vec3 Position;
};
std::vector<myStruct> structVector;
glm::vec3 outsidePosition;
};
但我遇到的问题是如何根据structVector
和structVector.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
答案 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())