C++ Unordered_map::find() Function



The C++ std::unordered_map::find() function is used to find the element associated with key k and returns an iterator if found, or it find an element with key equivalent to key.

If operation succeeds then methods returns iterator pointing to the element otherwise it returns an iterator pointing the map::end().

Syntax

Following is the syntax of std::unordered_map::find() function.

const_iterator find(const Key& keyval) const;

Parameters

  • k − It indicates the key value to search for.

Return value

If the specified key is found, then an iterator pointing to the element is returned; otherwise, a past-the-end (map::end()) iterator is returned.

Example 1

In the following example, we are demonstrating the usage of the std::unordered_map::find() function.

#include <iostream>
#include <unordered_map>
using namespace std;
int main(void) {
   unordered_map<char, int> um = {
      {'a', 1},
      {'b', 2},
      {'c', 3},
      {'d', 4},
      {'e', 5}
   };
   auto it = um.find('d');
   cout << "Iterator points to " << it->first << " = " << it->second << endl;
   return 0;
}

Output

If we run the above code it will generate the following output −

Iterator points to d = 4

Example 2

Consider the following example, where we are creating an unordered map that stores 1 to 5 values associated with a to e keys and finding the key/value pairs whose values are even.

#include <iostream>
#include <unordered_map>
using namespace std;
int main(void) {
   unordered_map<char, int> um = {
      {'a', 1},
      {'b', 2},
      {'c', 3},
      {'d', 4},
      {'e', 5}
   };
   for(auto it = um.begin(); it!=um.end(); ++it){
      if(it->second % 2 == 0){
         it = um.find(it->first);
         cout<<it->first<<" = "<<it->second<<endl;
      }
   }
   return 0;
}

Output

Let us compile and run the above program, this will produce the following result −

d = 4
b = 2

Example 3

Following is the example, where we are creating an unordered map and taking an input string; if the input key is available in the map, then it returns their key-value pairs, otherwise "not found".

#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int main () {
   unordered_map<string,double> mymap = {
      {"John",55.4},
      {"Vaibhav",65.1},
      {"Sunny",50.9}
   };
   string input;
   cout << "who? ";
   getline (cin,input);

   auto got = mymap.find (input);

   if ( got == mymap.end() )
      cout << "not found";
   else
      cout << got->first << " is " << got->second;
   return 0;
}

Output

Following is the output when our input is available in the map.

who? Vaibhav
Vaibhav is 65.1

Following is the output when our input is not available in the map:

who? Aman
not found
Advertisements