为什么我不能将此参数用于 std::sort() 的比较?
Why can't I use this parameter for Compare of std::sort()?
我正在尝试按网格位置与相机距离的升序对网格的std::向量(每个网格都有自己的变换类,因此也有位置)进行排序(预定义的Vec3)。
==renderlist.hpp==//Includes & guard omitted
typedef std::vector<Object*> ObjectList;
class RenderList
{
public:
RenderList(Object** objects, unsigned int numObjs, Camera& camRef);
ObjectList getOrderedObjectList();
void renderInOrder(Shader& master);
private:
ObjectList unorderedList;
Camera* cameraReference;
}
==renderlist.cpp==struct RenderListCompare
{
Vec3 cp;
RenderListCompare(Vec3 camPos)
{
cp = camPos;
}
bool compare(Object* obj1, Object* obj2)
{
Vec3 pos1 = obj1->getTransform().getTranslate();
Vec3 pos2 = obj2->getTransform().getTranslate();
return (pos1.distance(cp) > pos2.distance(cp));
}
};
RenderList::RenderList(Object** objects, unsigned int numObjs, Camera& camRef)
{
for(unsigned int i = 0; i < numObjs; i++)
{
this->unorderedList.push_back(objects[i]);
}
this->cameraReference = &camRef;
}
void RenderList::getOrderedObjectList()
{
ObjectList temp = this->unorderedList;
RenderListCompare rlc(this->cameraReference->getPos());
std::sort(temp.begin(), temp.end(), rlc.compare);
return temp;
}
这里的问题是,我试图使用<algorithm>
的std::sort
函数的Compare参数来告诉它如何排序列表(通过与相机位置的距离),但我用于比较的结构需要在使用其compare()
函数作为参数之前实例化。
类似于我尝试做的事情的例子可以在cplusplus.com上找到我在编译时得到以下错误:
renderlist.cpp:在成员函数"ObjectList renderlist::getOrderedObjectList()"中:renderlist.cpp:32:49:错误:对"sort(std::vector::迭代器,std::vector::iterator,)"的调用没有匹配的函数std::sort(temp.begin(),temp.end(),rlc.compare);^
我的猜测是,我曾试图模仿上面的链接来实现类似的效果,但之前向结构中添加了额外的信息,这可能会导致我出现语法错误。
比较器不是这样工作的。将您的compare
成员函数更改为operator()
…
struct RenderListCompare
{
RenderListCompare(const Vec3& camPos)
: cp(camPos)
{}
bool operator()(const Object* obj1, const Object* obj2)
{
Vec3 pos1 = obj1->getTransform().getTranslate();
Vec3 pos2 = obj2->getTransform().getTranslate();
return (pos1.distance(cp) > pos2.distance(cp));
}
private:
const Vec3 cp;
};
…并将RenderListCompare
对象传递给std::sort
,而不是自己命名成员函数。
std::sort(
temp.begin(),
temp.end(),
RenderListCompare(this->cameraReference->getPos())
);
相关文章:
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- C++中"std::sort"比较器的不同类型
- C++ <algorithm> 使用对象作为比较定义的 sort()
- 隐式转换为比较函数对象(函子)用于 std::sort 而不是 std::map?
- 使用类似的比较函数时,在 c++ 中为 std:sort 获得不同的结果
- 无法在 std::sort 中使用 cdef 函数作为比较函数
- std::sort 何时停止比较
- sort() 方法 c++ 中的比较器函数.为大量数字获得不同的解决方案
- 关于如何在 std::sort 和 std::p riority_queue 中使用自定义比较函数的困惑
- C++:为 std::sort 提供模板化比较函数
- std::sort 以严格的弱排序崩溃 - 与垃圾值进行比较
- sort()和stable_sort()的比较器的要求之间的差异
- std::sort与不严格的弱排序比较器可以作为拓扑排序工作
- 为什么当 std::sort 中的比较函数始终返回 true 时出现运行时错误
- 当参数相等时,为什么必须std :: sort比较函数返回false
- 类中的比较函数为 std::sort 无法编译
- 为什么这个自定义比较器在构造 std::p riority_queue 时无法解释 std::sort
- 在一个向量中使用sort()比较两个对象变量
- 使用std::sort比较器函数时出现异常错误
- 为什么不能在 std::sort() 比较函数中使用 "return lhs.size() == rhs.size()"?