std::set_intersection in C++
Last Updated :
08 Apr, 2023
The intersection of two sets is formed only by the elements that are present in both sets. The elements copied by the function come always from the first range, in the same order. The elements in the both the ranges shall already be ordered.
Examples:
Input :
5 10 15 20 25
50 40 30 20 10
Output :
The intersection has 2 elements :
10 20
1. Comparing elements using “<":
Syntax :
Template :
OutputIterator set_intersection (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result);
Parameters :
first1, last1
Input iterators to the initial and final positions of the first
sorted sequence. The range used is [first1, last1), which contains
all the elements between first1 and last1, including the element
pointed by first1 but not the element pointed by last1.
first2, last2
Input iterators to the initial and final positions of the second
sorted sequence. The range used is [first2, last2).
result
Output iterator to the initial position of the range where the
resulting sequence is stored.
The pointed type shall support being assigned the value of an
element from the first range.
Return Type :
An iterator to the end of the constructed range.
CPP
// CPP program to illustrate
// std :: set_intersection
#include <bits/stdc++.h>
int main()
{
int first[] = { 5, 10, 15, 20, 25 };
int second[] = { 50, 40, 30, 20, 10 };
int n = sizeof(first) / sizeof(first[0]);
std::vector<int> v1(5);
std::vector<int>::iterator it, ls;
std::sort(first, first + 5);
std::sort(second, second + 5);
// Print elements
std::cout << "First array :";
for (int i = 0; i < n; i++)
std::cout << " " << first[i];
std::cout << "\n";
// Print elements
std::cout << "Second array :";
for (int i = 0; i < n; i++)
std::cout << " " << second[i];
std::cout << "\n\n";
// std :: set_intersection
ls = std::set_intersection(first, first + 5, second, second + 5, v1.begin());
std::cout << "The intersection has " << (ls - v1.begin()) << " elements:";
for (it = v1.begin(); it != ls; ++it)
std::cout << ' ' << *it;
std::cout << "\n";
return 0;
}
Output:
First array : 5 10 15 20 25
Second array : 10 20 30 40 50
The intersection has 2 elements: 10 20
2. By comparing using a pre-defined function:
Syntax :
Template :
OutputIterator set_intersection (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result, Compare comp);
Parameters :
first1, last1, first2, last2, result are same as mentioned above.
comp
Binary function that accepts two arguments of the types pointed
by the input iterators, and returns a value convertible to bool.
The function shall not modify any of its arguments.
This can either be a function pointer or a function object.
It follows the strict weak ordering to order the elements.
Return Type :
An iterator to the end of the constructed range.
CPP
// CPP program to illustrate
// std :: set_intersection
#include <bits/stdc++.h>
bool comp(int a, int b)
{
return a < b;
}
int main()
{
int first[] = { 5, 10, 15, 20, 25 };
int second[] = { 50, 40, 30, 20, 10 };
int n = sizeof(first) / sizeof(first[0]);
std::vector<int> v1(5);
std::vector<int>::iterator it, ls;
std::sort(first, first + 5);
std::sort(second, second + 5);
// Print elements
std::cout << "First array :";
for (int i = 0; i < n; i++)
std::cout << " " << first[i];
std::cout << "\n";
// Print elements
std::cout << "Second array :";
for (int i = 0; i < n; i++)
std::cout << " " << second[i];
std::cout << "\n\n";
// std :: set_intersection
ls = std::set_intersection(first, first + 5, second, second + 5, v1.begin(), comp);
std::cout << "The intersection has " << (ls - v1.begin()) << " elements:";
for (it = v1.begin(); it != ls; ++it)
std::cout << ' ' << *it;
std::cout << "\n";
return 0;
}
Output:
First array : 5 10 15 20 25
Second array : 10 20 30 40 50
The intersection has 2 elements: 10 20
Possible Application : It is used to find the elements that are present only in both the sets.
1. It can be used to find the list of students that are present in both the classes.
CPP
// CPP program to demonstrate use of
// std :: set_intersection
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
// Driver code
int main()
{
string first[] = { "Sachin", "Rakesh", "Sandeep", "Serena" };
string second[] = { "Vaibhav", "Sandeep", "Rakesh", "Neha" };
int n = sizeof(first) / sizeof(first[0]);
// Print students of first list
cout << "Students in first class :";
for (int i = 0; i < n; i++)
cout << " " << first[i];
cout << "\n";
// Print students of second list
cout << "Students in second class :";
for (int i = 0; i < n; i++)
cout << " " << second[i];
cout << "\n\n";
vector<string> v(10);
vector<string>::iterator it, st;
// Sorting both the list
sort(first, first + n);
sort(second, second + n);
// Using default operator<
it = set_intersection(first, first + n, second, second + n, v.begin());
cout << "Students attending both the classes only are :\n";
for (st = v.begin(); st != it; ++st)
cout << ' ' << *st;
cout << '\n';
return 0;
}
OUTPUT :
Students in first class : Sachin Rakesh Sandeep Serena
Students in second class : Vaibhav Sandeep Rakesh Neha
Students attending both classes only are :
Rakesh Sandeep
2. It can also be used to find the common elements in both the list.
Program is given above.
3.Complexity
Complexity is linear in the distance between [first1, last1) and [first2, last2): performs up to
2*(count1+count2)-1 comparisons. Where count1 = last1- first1 and count2 = last2- first2.
Similar Reads
C++ Programming Language C++ is a computer programming language developed by Bjarne Stroustrup as an extension of the C language. It is known for is fast speed, low level memory management and is often taught as first programming language. It provides:Hands-on application of different programming concepts.Similar syntax to
5 min read
Object Oriented Programming in C++ Object Oriented Programming - As the name suggests uses objects in programming. Object-oriented programming aims to implement real-world entities like inheritance, hiding, polymorphism, etc. in programming. The main aim of OOP is to bind together the data and the functions that operate on them so th
5 min read
30 OOPs Interview Questions and Answers [2025 Updated] Object-oriented programming, or OOPs, is a programming paradigm that implements the concept of objects in the program. It aims to provide an easier solution to real-world problems by implementing real-world entities such as inheritance, abstraction, polymorphism, etc. in programming. OOPs concept is
15 min read
Inheritance in C++ The capability of a class to derive properties and characteristics from another class is called Inheritance. Inheritance is one of the most important features of Object-Oriented Programming in C++. In this article, we will learn about inheritance in C++, its modes and types along with the informatio
10 min read
Vector in C++ STL C++ vector is a dynamic array that stores collection of elements same type in contiguous memory. It has the ability to resize itself automatically when an element is inserted or deleted.Create a VectorBefore creating a vector, we must know that a vector is defined as the std::vector class template i
7 min read
Templates in C++ C++ template is a powerful tool that allows you to write a generic code that can work with any data type. The idea is to simply pass the data type as a parameter so that we don't need to write the same code for different data types.For example, same sorting algorithm can work for different type, so
9 min read
C++ Interview Questions and Answers (2025) C++ - the must-known and all-time favourite programming language of coders. It is still relevant as it was in the mid-80s. As a general-purpose and object-oriented programming language is extensively employed mostly every time during coding. As a result, some job roles demand individuals be fluent i
15+ min read
Operator Overloading in C++ in C++, Operator overloading is a compile-time polymorphism. It is an idea of giving special meaning to an existing operator in C++ without changing its original meaning.In this article, we will further discuss about operator overloading in C++ with examples and see which operators we can or cannot
8 min read
C++ Standard Template Library (STL) The C++ Standard Template Library (STL) is a set of template classes and functions that provides the implementation of common data structures and algorithms such as lists, stacks, arrays, sorting, searching, etc. It also provides the iterators and functors which makes it easier to work with algorith
9 min read
C++ Classes and Objects In C++, classes and objects are the basic building block that leads to Object-Oriented programming in C++. We will learn about C++ classes, objects, look at how they work and how to implement them in our C++ program.C++ ClassesA class is a user-defined data type, which holds its own data members and
9 min read