如何检查两个不同类型的向量是否相等

How to check two vectors of different types for equality

我有两个向量,ab,分别是 abcabc2 结构:

struct abc {
    const int &data;
    abc(const int& cdata) : data(cdata) {}
};

struct abc2 {
    const int& data;
    abc2(const int& cdata) : data(cdata) {}

    bool operator== (const abc& c1) const {
        return (c1.data == data);
    }
};

int main() {

    std::vector<abc> a{abc(2), abc(2)};
    std::vector<abc2> b{abc2(2), abc2(2)};

}

我想看看 ab 是否相等。

然而,当我尝试以下操作时:

assert(a == b);

我得到一个

的编译时错误

Error C2678 binary '==': no operator found which takes a left-hand operand of type 'std::vector<abc,std::allocator<_Ty>>' (or there is no acceptable conversion) with [ _Ty=abc ]

如何为这两个不同类型的向量实现自定义相等性检查?我不需要做 abc == abc2 所以 abc 结构不需要重载等于运算符。

有一个比较相等性的标准算法:std::equal。在这种情况下

assert(std::equal(b.begin(), b.end(), a.begin(), a.end()));