如何检查两个不同类型的向量是否相等
How to check two vectors of different types for equality
我有两个向量,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);
我得到一个
的编译时错误
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()));
我有两个向量,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);
我得到一个
的编译时错误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()));