使用 Eigen 查找两个列表之间的差异

Find difference between two lists using Eigen

我想找出两个列表之间的区别。例如:

// two lists:
A = [ 0, 1, 2, 3, 4, 5, 6 ];
B = [ 1, 4, 5 ];

// difference between the lists:
C = [ 0, 2, 3, 6 ];

我使用 C++ 的 STL 库完成了如下操作:

#include <iostream>
#include <vector>

int main()
{
  std::vector<size_t> A = {0, 1, 2, 3, 4, 5, 6};
  std::vector<size_t> B = {1, 4, 5};
  std::vector<size_t> C;

  std::set_difference(A.begin(),A.end(), B.begin(),B.end(), std::inserter(C,C.begin()));

  return 0;
}

但是,因为我的应用程序主要使用 Eigen,所以我现在也想使用 Eigen 来执行此操作。我无法在文档或网上找到我要找的东西。

请注意,我特别想避免编写自己的函数。

给你:

#include <iostream>
#include <Eigen/Dense>

int main()
{
    using namespace Eigen;

    VectorXd a(3), b(1);
    VectorXd c(a.size());

    a << 1,2,3;
    b << 1;

    auto it = std::set_difference(a.data(), a.data() + a.size(), 
                                  b.data(), b.data() + b.size(), 
                                  c.data());
    c.conservativeResize(std::distance(c.data(), it)); // resize the result
    std::cout << c;
}

这里的关键是使用 Eigen::VectorXd::data() 成员函数,它 returns 一个指向底层存储的指针,它本身是一个可以传递给 C++ 标准库函数的迭代器。