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

Find difference between two lists using Eigen

本文关键字:列表 两个 之间 特征 查找      更新时间:2023-10-16

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

// 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;
}

但是,由于我的应用程序主要使用特征,所以我现在也想使用特征来执行此操作。我在文档中或在线都找不到我要查找的内容。

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

你来了:

#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()成员函数,该函数返回指向底层存储的指针,该指针本身是一个迭代器,可以传递到C++标准库函数。