如何比较两个动态数组并检查哪些元素匹配

How do I compare two dynamic arrays and check which elements match?

本文关键字:检查 元素 数组 两个 何比较 比较 动态      更新时间:2023-10-16

我想比较两个矩阵的元素,如果该位置中的元素匹配,则返回包含1的矩阵,否则返回0。我创建了一个简单的测试函数:

template <class A, class B>
void func(const A& a, const B& b)
{
    auto c = (b.array() == a.array()).cast<int>();
    std::cout << c;
}
所以我写了一个main函数来测试它:
int main()
{
    Eigen::Array<int,Eigen::Dynamic,Eigen::Dynamic> b;
    b.resize(2,2);
    b.fill(2);
    auto a = b;
    a(0,0) = 1;
    a(0,1) = 2;
    a(1,0) = 3;
    a(1,1) = 4;
    func(a,b);
    return 0;
}

但是我一直得到这个错误:
eigenOperations.cpp: In function ‘void func(const A&, const B&)’: eigenOperations.cpp:8:24: error: expected primary-expression before ‘int’ auto c = temp.cast<int>(); eigenOperations.cpp:8:24: error: expected ‘,’ or ‘;’ before ‘int’ make: *** [eigenOperations] Error 1

我在这里做错了什么?

不管是谁把这个标记为重复的都是对的。出现这个问题是因为我没有完全理解c++的template关键字。

在哪里以及为什么我必须把"template"answers";typename"关键字?

将函数替换为以下内容可以修复问题:

template <class A, class B>
void func(const A& a, const B& b)
{
    auto c = (b.array() == a.array()).template cast<int>();
    std::cout << c;
}