First example:
int main(){
using namespace std;
vector<int> v1{10, 20, 30, 40, 50};
vector<int> v2{10, 20, 30, 40, 50};
if(v1==v2)
cout<<"equal";
else
cout<<"unequal";
} // it returns equal
Second example:
int main(){
using namespace std;
vector<int> v1{10, 20, 30, 40, 50};
vector<int> v2{10, 20, 100000, 40, 50};
if(v1==v2)
cout<<"equal";
else
cout<<"unequal";
} // it returns notequal
The overload of operator ==
that works on two std::vector
s will compare the vector sizes and return false
if those are different; if not, it will compare the contents of the vector element-by-element.
If operator ==
is defined for the vector's element type, then the comparison of vectors through operator ==
is valid and meaningful.
In formal terms, the C++11 standard specifies the operational semantics of a == b
for sequence containers as (Table 96, § 23.2.1):
==
is an equivalence relation.
distance(a.begin(), a.end()) == distance(b.begin(), b.end()) && equal(a.begin(), a.end(), b.begin())
As you can see, equality between sequence containers is defined in terms of the std::equal
algorithm between ranges defined by pairs of iterators, which in turn uses operator ==
for comparison of individual elements.