Функция mismatch
Функция mismatch сравнивает два диапазона элементов и
возвращает пару итераторов, указывающих на первое несовпадение
элементов. В первый и второй параметры мы передаем итераторы
начала первого и второго диапазонов, а в третий - итератор
конца второго диапазона. Также можно передать четвертый
параметр - предикат, задающий условие сравнения. Если
диапазоны полностью совпадают, функция возвращает пару
итераторов на концы диапазонов.
Синтаксис
mismatch(first1, last1, first2)
mismatch(first1, last1, first2, pred)
Пример
Давайте сравним два вектора и найдем первое несовпадение элементов:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v1 = {1, 2, 3, 4, 5};
vector<int> v2 = {1, 2, 9, 4, 5};
auto res = mismatch(v1.begin(), v1.end(), v2.begin());
if (res.first != v1.end())
{
cout << "First mismatch at position: ";
cout << distance(v1.begin(), res.first) << endl;
cout << "Values: " << *res.first;
cout << " and " << *res.second << endl;
}
return 0;
}
Результат выполнения кода:
"First mismatch at position: 2"
"Values: 3 and 9"
Пример
Давайте сравним два вектора строк, которые полностью совпадают:
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
vector<string> v1 = {"a", "b", "c", "d", "e"};
vector<string> v2 = {"a", "b", "c", "d", "e"};
auto res = mismatch(v1.begin(), v1.end(), v2.begin());
if (res.first == v1.end())
{
cout << "Ranges are equal" << endl;
}
return 0;
}
Результат выполнения кода:
"Ranges are equal"
Пример
Давайте сравним два вектора с пользовательским предикатом, который сравнивает элементы по модулю:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v1 = {1, 2, 3, 4, 5};
vector<int> v2 = {-1, -2, -3, 9, -5};
auto pred = [](int a, int b) {
return a == -b;
};
auto res = mismatch(v1.begin(), v1.end(), v2.begin(), pred);
if (res.first != v1.end())
{
cout << "First mismatch at position: ";
cout << distance(v1.begin(), res.first) << endl;
cout << "Values: " << *res.first;
cout << " and " << *res.second << endl;
}
return 0;
}
Результат выполнения кода:
"First mismatch at position: 3"
"Values: 4 and 9"
Смотрите также
-
функция
equal,
которая проверяет равенство двух диапазонов -
функция
find,
которая ищет элемент в диапазоне -
функция
search,
которая ищет подпоследовательность в диапазоне -
функция
lexicographical_compare,
которая сравнивает два диапазона лексикографически