簡體   English   中英

使用特征值找出兩個列表之間的差異

[英]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()成員函數,該成員函數返回指向基礎存儲的指針,該指針本身是可以傳遞給C ++標准庫函數的迭代器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM