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

时间:2020-11-04 18:30:27

标签: c++ vector operator-overloading 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);

我得到一个编译时错误

错误C2678二进制'==':未找到采用类型为'std :: vector >'的左侧操作数的运算符(或没有可接受的转换) 与 [ _Ty = abc ]

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

1 个答案:

答案 0 :(得分:1)

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

assert(std::equal(b.begin(), b.end(), a.begin(), a.end()));
相关问题