Open In App

How does generic find() function works in C++ STL?

Last Updated : 01 Mar, 2021
Improve
Improve
Like Article
Like
Save
Share
Report

find(): The find() function is used to search the element in the given range and every STL container has the functionality to search the element using find() function. The generic find function works on every data type.

Return Type:

  • It returns an iterator to the first element in the range [first, last) that equals to the given key
  • If no such element is found, the function returns the iterator to the last element.

Approach:

  • Vector of different data types like int, string, etc and one key element has been taken. 
  • Based on the key element search function is called.
  • The working mechanism of the search function is written using a template.
  • The function searches the element from the start to the end of the vector, based on the key element. If the value doesn’t exist, then it will return the end iterator.
  • If the key element matches with the vector element, then it will return the element along with its position.

Below is the C++ program to illustrate the implementation of generic find() in vector:

C++




// C++ program to illustrate the
// implementation of generic find()
#include <iostream>
#include <vector>
using namespace std;
  
// Two generic templates classes one
// for iterator and other for key
template <class ForwardIterator, class T>
ForwardIterator search(
    ForwardIterator start,
    ForwardIterator end, T key)
{
    while (start != end) {
  
        // If key is present then return
        // the start iterator
        if ((*start) == key) {
            return start;
        }
  
        // Increment the iterator
        start++;
    }
  
    // If key is not present then,
    // return end iterator
    return end;
}
  
// Function to illustrate the use
// of generic find()
void inputElements()
{
    // Vector of integer data type
    vector<int> v{ 10, 20, 40, 30, 50 };
  
    // Element to be searched
    int key = 100;
  
    // Stores the address
    auto it = search(v.begin(), v.end(),
                     key);
  
    if (it != v.end()) {
  
        cout << key << " is present"
             << " at position "
             << it - v.begin() + 1
             << endl;
    }
    else {
  
        cout << key
             << " is not present"
             << endl;
    }
  
    cout << endl;
  
    // Vector of string data type
    vector<string> str{ "C++", "Python",
                        "GFG", "Ruby" };
  
    // Element to be searched
    string key2 = "GFG";
  
    // Stores the address
    auto it2 = search(str.begin(), str.end(),
                      key2);
  
    if (it2 != str.end()) {
  
        cout << key2 << " is present "
             << "at position "
             << it2 - str.begin() + 1
             << endl;
    }
    else {
  
        cout << key2 << " is not Present"
             << endl;
    }
}
  
// Driver Code
int main()
{
    // Function Call
    inputElements();
  
    return 0;
}


Output:

100 is not present

GFG is present at position 3


Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads