The mismatch function in C++ Algorithm compares two containers to identify any differences in values. It returns the first element in each container that does not match.
Syntax
template<class InputIterator1, classInputIterator2>
pair<InputIterator1, InputIterator2> mismatch(InputIterator1 first1, InputIterator2 first2>
template<class InputIterator1, class InputIterator2, class BinaryPredicate> pair<InputIterator1,InputIterator2>
mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2,BinaryPredicate pred);
Parameter
It serves as an input iterator pointing to the initial element within the range of [first1, last1).
It serves as an input iterator pointing to the final element within the range of [first1, last1).
It serves as an input iterator pointing to the initial element within the range [first2, last2).
pred : It is a binary function that takes in two elements as parameters and executes the specific operation defined within the function.
Return value
If the function detects a mismatch in a pair of elements, it will return the initial pair of such elements, one from each respective container.
If none of the items within the containers correspond with each other, the function will output the pair (first1, first2).
If the whole element in the pair matches, the function will output a pair consisting of last1 and the element located at the corresponding position to last1 in the second container.
Example 1
#include<iostream>
#include<algorithm>
#include<vector>
#include<utility>
bool newpredicate(int m, int n)
{
return(m==n);
}
int main()
{
std::vector<int> newvector;
for (int m=1; m<6; m++)
newvector.push_back(m*10);
int newints[]={10,20,80,320,1024};
std::pair<std::vector<int>::iterator,int*> newpair;
newpair=std::mismatch(newvector.begin(),newvector.end(),newints);
std::cout<<"Out of the given elements the first mismatching pair is:"<<*newpair.first;
std::cout<<" and "<<*newpair.second<<"\n";
++newpair.first; ++newpair.second;
newpair=std::mismatch(newpair.first, newvector.end(),newpair.second, newpredicate);
std::cout<<"The next pair of mismatching elements are:"<<*newpair.first;
std::cout<<" and "<<*newpair.second<<"\n";
return 0;
}
Output:
Out of the given elements the first mismatching pair is: 30 and 80
The next pair of mismatching elements are: 40 and 320
Example 2
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool comp(int c, int d)
{
return (c>d);
}
int main()
{
vector<int> u1 = { 23, 13, 15, 20 };
vector<int> u2 = { 1, 10, 25, 30, 45 };
vector<int> u3 = { 12, 100, 152, 204 };
vector<int> u4 = { 1, 10, 15, 20, 24 };
pair< vector<int>::iterator,
vector<int>::iterator > unpair;
unpair = mismatch(u1.begin(), u1.end(), u2.begin());
cout << "From the first container the element that does not match is: ";
cout << *unpair.first << endl;
cout << " From the second container the element that does not match container is: ";
cout << *unpair.second << endl;
unpair = mismatch(u3.begin(), u3.end(), u4.begin());
cout << "From first container return value is:";
cout << *unpair.first << endl;
cout << " From second container return value is: ";
cout << *unpair.second << endl;
}
Output:
From the first container the element that does not match is: 23
From the second container the element that does not match container is: 1
From firt container return value is:12
From second container return value is: 1
Complexity
The function exhibits a linear time complexity from the initial element to the final element.
Data races
Objects in both ranges are accessed.
Exceptions
The function will raise an exception if any of its arguments also throws an exception.