C++ 如何在Eigen::vector的std::vector上进行唯一排序?

C++ 如何在Eigen::vector的std::vector上进行唯一排序?,c++,eigen,C++,Eigen,编译器无法找出该类型的小于运算符。我还尝试了lambda和谓词函数 #include <Eigen/Dense> typedef Eigen::Vector3f vec3; inline bool operator<(const vec3 &lhs, const vec3 &rhs) { return lhs.x() < rhs.x() && lhs.y() < rhs.y() && lhs.z() <

编译器无法找出该类型的小于运算符。我还尝试了lambda和谓词函数

#include <Eigen/Dense>
typedef Eigen::Vector3f vec3;

inline bool operator<(const vec3 &lhs, const vec3 &rhs) {
    return lhs.x() < rhs.x() && lhs.y() < rhs.y() && lhs.z() < rhs.z();
}

inline bool cmpVecs(const vec3 &lhs, const vec3 &rhs) {
    return lhs.x() < rhs.x() && lhs.y() < rhs.y() && lhs.z() < rhs.z();
}


inline void removeDuplicates(std::vector<vec3> &con)
{
    std::sort(con.data(), con.data() + con.size());
    auto itr = std::unique(con.begin(), con.end(), cmpVecs);
    con.resize(itr - con.begin());
}

void init(std::vector<vec3> &verts) {
    removeDuplicates(verts);
}
#包括
typedef-Eigen::Vector3f-vec3;
带1>1的内联布尔运算符[
1> _Scalar=float,1>_Rows=3,1>
_Cols=1>]

相关职位:


std::sort
有一个覆盖,允许您指定要使用的比较器,例如:

struct vec3comp{
    bool operator()(const vec3 &lhs, const vec3 &rhs){
        return lhs.x() < rhs.x() && lhs.y() < rhs.y() && lhs.z() < rhs.z();
    }
} mycomp;

std::sort(con.data(), con.data() + con.size(),mycomp);`
struct vec3comp{
布尔运算符(){
返回lhs.x();
}
}mycop;
排序(con.data(),con.data()+con.size(),mycomp)`

编辑:你能用lambda函数显示你的代码吗?它应该可以正常工作。

TBH,我的排序方法也不正确,我不认为。我认为是按浮点数排序,而不是按3排序。我只是复制了我上面贴的链接。也有可能它不是字节对齐的。。。现在检查一下。是的,静态_断言在测试size==3*sizeof(float)时失败,这在某些方面是有意义的,尽管很糟糕。无论哪种方式,它都会给我运算符<的错误,即使在使用您链接的struct方法时也是如此,尽管它应该写为mycomp().nvm我在做sizeof(sizeof())。。。就像我说的。即使在尝试该结构时,仍然会显示错误。结果表明,我没有将compare函数与std::sort()一起使用。我只是用它的独特。我想投赞成票,但我没有这个能力。只要标出答案就可以了。这样,(已回答的)问题就不会保留在页面顶部。您的比较函数不正确,因为
std::sort
需要严格的弱排序谓词<代码>{if(lhs.x()
以上注释中的比较对我有效。这是很难找到的,尽管这种独特性在matlab中非常常见。