Skip to content
Related Articles

Related Articles

std::includes() in C++ STL

Improve Article
Save Article
  • Difficulty Level : Easy
  • Last Updated : 28 Apr, 2022
Improve Article
Save Article

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




// C++ code to demonstrate the working of includes()
#include <bits/stdc++.h>
using namespace std;
 
// Driver Code
int main()
{
    // initializing 1st container
    vector<int> arr1 = { 1, 4, 6, 3, 2 };
 
    // initializing 2nd container
    vector<int> arr2 = { 1, 2, 4 };
 
    // sorting initial containers
    sort(arr1.begin(), arr1.end());
    sort(arr2.begin(), arr2.end());
 
    // using include() check if all elements
    // of arr2 lie in arr1
    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




// C++ code to demonstrate the working of
// includes()
#include <bits/stdc++.h>
using namespace std;
 
// comparator function
bool comp(int i, int j) { return i < j; }
 
// Driver Code
int main()
{
    // initializing 1st container
    vector<int> arr1 = { 1, 4, 6, 3, 2 };
 
    // initializing 2nd container
    vector<int> arr2 = { 1, 2, 4 };
 
    // sorting initial containers
    sort(arr1.begin(), arr1.end());
    sort(arr2.begin(), arr2.end());
 
    // using include() check if all elements
    // of arr2 lie in arr1
    // using comparator function
    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




// C++ code to demonstrate the application of
// includes()
#include <bits/stdc++.h>
using namespace std;
 
// Driver Code
int main()
{
    // lottery numbers
    vector<int> lottery = { 1, 4, 6, 3, 2, 54, 32 };
 
    // Numbers in user's card
    vector<int> user = { 1, 2, 4, 6 };
 
    // sorting initial containers
    sort(lottery.begin(), lottery.end());
    sort(user.begin(), user.end());
 
    // using include() check if all elements
    // of user are present as lottery numbers
    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 )

This article is contributed by Manjeet Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!