Функция set_intersection
Функция set_intersection из библиотеки algorithm
находит пересечение двух отсортированных диапазонов,
то есть элементы, которые присутствуют одновременно
в первом и во втором диапазоне. В первый и второй
параметры мы передаем итераторы начала и конца первого
диапазона, в третий и четвертый - итераторы начала
и конца второго диапазона, а в пятый - итератор
начала места, куда следует записать результат.
Функция возвращает итератор на конец записанного
результата. Оба исходных диапазона должны быть
отсортированы по возрастанию.
Синтаксис
set_intersection(first1, last1, first2, last2, res)
Пример
Давайте найдем пересечение двух векторов
{1, 2, 3, 4, 5} и {3, 4, 5, 6, 7}:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> a = {1, 2, 3, 4, 5};
vector<int> b = {3, 4, 5, 6, 7};
vector<int> res(5);
auto it = set_intersection(a.begin(), a.end(), b.begin(), b.end(), res.begin());
res.resize(it - res.begin());
for (int x : res) {
cout << x << " ";
}
return 0;
}
Результат выполнения кода:
3 4 5
Пример
Давайте найдем пересечение двух векторов
{"a", "b", "c", "d", "e"} и {"c", "d", "e", "f", "g"}:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
vector<string> a = {"a", "b", "c", "d", "e"};
vector<string> b = {"c", "d", "e", "f", "g"};
vector<string> res(5);
auto it = set_intersection(a.begin(), a.end(), b.begin(), b.end(), res.begin());
res.resize(it - res.begin());
for (string x : res) {
cout << x << " ";
}
return 0;
}
Результат выполнения кода:
"c" "d" "e"
Смотрите также
-
функция
set_union,
которая находит объединение двух множеств -
функция
set_difference,
которая находит разность двух множеств -
функция
includes,
которая проверяет вхождение одного диапазона в другой -
функция
merge,
которая объединяет два отсортированных диапазона