如何在Eigen :: Vector的std :: vector上排序?

时间:2013-05-18 23:50:06

标签: 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() < 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);
}

VS 2012错误:

  

算法(3618):错误C2678:二进制'&lt;' :没有操作员找到哪个   采用'Eigen :: Matrix&lt; _Scalar,_Rows,_Cols&gt;'类型的左手操作数   (或者没有可接受的转换)1&gt;用1> [   1 GT; _Scalar = float,1&gt; _Rows = 3,1&gt;
  _Cols = 1 1&gt; ]

相关文章:

1 个答案:

答案 0 :(得分: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);`

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