问题描述
我分别具有结构a
和b
的两个向量abc
,abc2
:
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)};
}
我想看看a
和b
是否相等。
但是,当我尝试以下操作时:
assert(a == b);
错误C2678二进制'==':未找到采用类型为'std :: vector
>'的左侧操作数的运算符(或没有可接受的转换) 与 [ _Ty = abc ]
如何为这两个不同类型的向量实现自定义相等性检查?我不需要做abc
== abc2
,因此abc
结构不需要重载等于运算符。
解决方法
有一个用于比较相等性的标准算法:std::equal
。在这种情况下
assert(std::equal(b.begin(),b.end(),a.begin(),a.end()));