从std :: vector <unsigned>映射到Eigen :: VectorXi

时间:2019-09-08 16:48:24

标签: c++ eigen

是否可以通过以下方式将std::vector<unsigned>映射到Eigen::VectorXi

    std::vector<unsigned> a = {1,2,3,4,5};
    Eigen::VectorXi c = Eigen::VectorXi::Map(a.data(), a.size());

我想跳过这两个步骤之间的步骤:

    std::vector<int> b(a.begin(),a.end());

1 个答案:

答案 0 :(得分:3)

您的专线

Eigen::VectorXi c = Eigen::VectorXi::Map(a.data(), a.size());

不会“直接将std::vector<unsigned>映射到Eigen::VectorXi”,而是将数据复制到新的Eigen::VectorXi。如果要使用Eigen功能包装现有数据数组,则应使用类似以下内容的方法:

Eigen::Map<Eigen::VectorXi> wrappedData(a.data(), a.size());

然后,您可以像使用其他wrappedData一样使用VectorXi,但重新调整基础数据的大小(该数据仍由std::vector拥有)除外。有关更多详细信息,请参见documentation

如果您要避免将数据复制到std::vector<int>,则可以使用“自定义”矩阵类型,即

typedef Eigen::Matrix<unsigned int, Eigen::Dynamic, 1> VectorXui;
Eigen::Map<VectorXui> wrappedData(a.data(), a.size());