用vector存储自定义类型需满足什么条件,才能用vector运算比较符?
cout<<(vec1==vec2)<<endl;
上面的一句编译失败,刚学vector容器,也不知道错在哪里,在书上和百度也找不到答案,求指出错误
之处。
如题,还恳请讲清楚:
用vector存储自定义类型需满足什么条件,才能用vector运算比较符?
#include <iostream>
#include <vector>
using namespace std;
class A
{
public:
A(){}
A(int val):x(val){}
private:
int x;
};
int main ()
{
A a(1),b(2);
vector<A> vec1;
vector<A> vec2;
vec1.push_back(a);
vec2.push_back(b);
cout<<(vec1==vec2)<<endl;
return 0;
} vector存储自定义类型 vector运算比较符 满足什么条件
[解决办法]
当使用==比较两个STL(vector)容器的时候,会先检查两个容器size是否相等,如果相等最终会调用到下面的代码:
template<class _InIt1,class _InIt2>
inlinebool _Equal(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2)
{
for (; _First1 != _Last1; ++_First1, ++_First2)
if (!(*_First1 == *_First2)) return (false);
return (true);
}
可以看到,它会逐个遍历比较两个容器的元素。所以:
1. 对于内置类型(int,double),我们不需要做什么,因为已经支持彼此的比较(==)操作。
2. 对于自定义类型,我们就得提供自己的 == 重载了。
所以,你应该这么改:
class A
{
public:
A(){}
A(int val):x(val){}
friend bool operator == (const A& one, const A& two)
{
return (one.x == two.x) ? true : false;
}
private:
int x;
};
[解决办法]
bool operator==(const A& other)const
作为成员的operator==应该声明为const.