c++ - 扩展 Eigen 库以包含排序

标签 c++ eigen

我想扩展 C++ Eigen 库以包含命令 v.sort();我正在使用概述的基于 EIGEN_MATRIXBASE_PLUGIN 的方法 here .

下面的代码(在我的“MatrixBaseAddons.h”中)不起作用,因为“结果”对象没有加载“this”的拷贝——在调试器中,“result.rows()”是一个未初始化的值,不等于 derived()->rows()。我如何实际复制“this”并将其放入“result”?

// DOES NOT WORK
MatrixBase<Derived> sort(bool ascending = true) const {
    MatrixBase<Derived> result = derived();
    result.sortInPlace(ascending);
    return result;
}

// WORKS!
void sortInPlace(bool ascending = true) {
    std::sort(derived().data(), derived().data() + derived().size());
    if (!ascending)
        this->reverseInPlace();
}

最佳答案

MatrixBase是一个抽象类。您需要返回一个 Matrix<>具有适当标量类型和大小的对象。您可以直接使用 typedef PlainObject为此:

PlainObject sort(bool ascending = true) const {
  PlainObject res = derived();
  ...
  return res;
}

关于c++ - 扩展 Eigen 库以包含排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40223829/

相关文章:

c++ - 在 Eigen 中复制模板化函数参数

C++ Continue 语句混淆

c++ - Visual C++6.0中CEdit的消息

c++ - Eigen:简单的乘法和加法优化

c++ - 如何将 Eigen::Matrix4f 转换为 Eigen::Affine3f

c++ - 如何使用线性代数的C++模板库Eigen?

c++ - 为 vector 分配大量空间

c++ - 模板化方法的未解决符号特化

c++ - 搜索功能不起作用

c++ - 将 vector<vector<double>> 转换为特征矩阵?