本文描述的问题其实在帮助手册中已经进行了描述:
bool QVector::contains(const T &value) const
Returns true if the vector contains an occurrence of value; otherwise returns false.
This function requires the value type to have an implementation of operator==().
这话翻译过来就是,如果要在Qvector下实现contains的功能,就需要重载==运算符。
什么意思呢?大家都知道QVector是一个模板类,对于QT的内置类型如int、double、QString等类型QT做了处理,故这些类型本身无需重载==运算符就可实现比较功能;但是对于自定义类型,如自定义类类型, 例如自定义类类型A,在QVector<A>如果存在使用如下语句:
QVector<A> vtest;
....
A a;
if(!vtest.contains(a)) //对A类型下使用contains进行判断,A类型默认是不支持类类型比较的,需要用户实现
vtest.push_back(a);
若要实现上述的功能需要,需要类A实现==运算符重载,如下所示:
class A{
A();
...
bool operator==(const A& a)
{
....
}
}