std::includes() in C++ STL
Last Updated :
28 Apr, 2022
includes() is a C++ function that can be used to recognize if all the numbers in a container, also exist in other containers. It helps to check whether a set is a subset of another set or not considering the set is ordered. The elements are expected to be in sorted order. This function is defined in <algorithm> header file.
There are two implementations possible and are explained below:
Syntax 1: Using operator “<“
Template:
template
bool includes (initer1 beg1, initer1 end1,
initer2 beg2, initer2 end2,)
Parameters:
- beg1: Input iterator to initial position of first sorted sequence.
- end1: Input iterator to the final position of the first sorted sequence.
- beg2: Input iterator to initial position of the second sorted sequence.
- end2: Input iterator to the final position of the second sorted sequence.
Return value: True, if every element of 2nd container lies in 1st container.
It has linear time complexity.
CPP
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector< int > arr1 = { 1, 4, 6, 3, 2 };
vector< int > arr2 = { 1, 2, 4 };
sort(arr1.begin(), arr1.end());
sort(arr2.begin(), arr2.end());
if (includes(arr1.begin(), arr1.end(), arr2.begin(),
arr2.end()))
cout << "All elements of 2nd container are in 1st "
"container" ;
else
cout << "All elements of 2nd container are not in "
"1st container" ;
}
|
Output
All elements of 2nd container are in 1st container
Syntax 2: Using Comparator
Template:
template
bool includes (initer1 beg1, initer1 end1,
initer2 beg2, initer2 end2, Compare comp)
Parameters:
- beg1: Input iterator to initial position of first sorted sequence.
- end1: Input iterator to the final position of the first sorted sequence.
- beg2: Input iterator to initial position of the second sorted sequence.
- end2: Input iterator to the final position of the second sorted sequence.
- comp: The comparator function that returns a boolean true/false of each element compared. This function accepts two arguments. This can be a function pointer or function object and cannot change values.
Return value: True if every element of the 2nd container lies in the 1st container.
CPP
#include <bits/stdc++.h>
using namespace std;
bool comp( int i, int j) { return i < j; }
int main()
{
vector< int > arr1 = { 1, 4, 6, 3, 2 };
vector< int > arr2 = { 1, 2, 4 };
sort(arr1.begin(), arr1.end());
sort(arr2.begin(), arr2.end());
if (includes(arr1.begin(), arr1.end(), arr2.begin(),
arr2.end(), comp))
cout << "All elements of 2nd container are in 1st "
"container" ;
else
cout << "All elements of 2nd container are not in "
"1st container" ;
return 0;
}
|
Output
All elements of 2nd container are in 1st container
Application: This function can be potentially used to find if a set is a subset of another or can be used to determine the lottery winner, in a system in which a person who has all the lottery numbers in his card wins the lottery. The latter one is explained below through code.
CPP
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector< int > lottery = { 1, 4, 6, 3, 2, 54, 32 };
vector< int > user = { 1, 2, 4, 6 };
sort(lottery.begin(), lottery.end());
sort(user.begin(), user.end());
if (includes(lottery.begin(), lottery.end(),
user.begin(), user.end()))
cout << "User has won lottery ( all numbers are "
"lottery numbers )" ;
else
cout << "User has not won the lottery" ;
}
|
Output
User has won lottery ( all numbers are lottery numbers )
Share your thoughts in the comments
Please Login to comment...