根据类外的值对向量进行排序
Sort vector based on value outside of class
我有一个std::vector<myStruct>
,我的结构的简单版本看起来像这样:
struct myStruct {
glm::vec3 Position;
};
上面的结构在一个类中声明:
class myClass {
private:
struct myStruct {
glm::vec3 Position;
};
std::vector<myStruct> structVector;
glm::vec3 outsidePosition;
};
但是我遇到的问题是我如何根据structVector.Position
和outsidePosition
之间的距离对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())
相关文章:
- 将结构向量排序为子组
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 如何在对向量排序后更改索引值?c++
- C++向量排序给出0作为输出
- 将许多向量排序在一起
- 根据一个向量对多个向量排序
- 编译错误向量排序和联合
- C++我自己的函数进行向量排序
- 将字符串的向量排序为日期"yyyymmdd"
- C++ 通过使用旧向量进行预排序来改进向量排序
- C 向量排序 .h .cpp中的单独文件
- 向量排序-c++
- 将向量排序到一个无序映射c++11中
- 向量的向量排序
- c++向量排序方法编译失败,返回预期表达式
- 如何对bitset向量排序
- 向量排序的基础上只有先
- 我如何以相同的方式对两个向量排序,而条件只使用其中一个向量
- 列表排序和结构体向量排序之间的性能差距.c++
- 如何基于第二个字符串对字符串向量的向量排序