home | help
std::unordered_map::find(3)    C++ Standard Libary   std::unordered_map::find(3)

NAME
     std::unordered_map::find - std::unordered_map::find

Synopsis
	iterator find( const Key& key );	     (1) (since C++11)
	const_iterator find( const Key& key ) const; (2) (since C++11)
	template< class K >			     (3) (since C++20)
	iterator find( const K& x );
	template< class K >			     (4) (since C++20)
	const_iterator find( const K& x ) const;

	1,2) Finds an element with key equivalent to key.
	3,4)  Finds an element with key that compares equivalent to the value x.
     This
	overload participates in overload resolution only if  Hash::is_transpar-
     ent and
	KeyEqual::is_transparent are valid and each denotes a type. This assumes
     that such
	Hash  is  callable  with  both	K and Key type, and that the KeyEqual is
     transparent,
	which, together, allows calling this function  without	constructing  an
     instance of
	Key.

Parameters
	key - key value of the element to search for
	x   - a value of any type that can be transparently compared with a key

Return value
	An iterator to the requested element. If no such element is found, past-
     the-end (see
	end()) iterator is returned.

Complexity
	Constant on average, worst case linear in the size of the container.

Notes
		Feature-test macro	    Value    Std		Feature
							   Heterogeneous compar-
     ison lookup
	__cpp_lib_generic_unordered_lookup 201811L (C++20) in unordered associa-
     tive
							   containers; overloads
     (3,4)

Example
     // Run this code

      #include <cstddef>
      #include <functional>
      #include <iostream>
      #include <string>
      #include <string_view>
      #include <unordered_map>

      using namespace std::literals;

      struct string_hash
      {
	  using hash_type = std::hash<std::string_view>;
	  using is_transparent = void;

	  std::size_t	operator()(const   char*   str)  const	       {  return
     hash_type{}(str); }
	  std::size_t  operator()(std::string_view   str)   const     {   return
     hash_type{}(str); }
	  std::size_t	operator()(std::string	 const&   str)	const  {  return
     hash_type{}(str); }
      };

      int main()
      {
	  // simple comparison demo
	  std::unordered_map<int,char> example{{1, 'a'}, {2, 'b'}};

	  if (auto search = example.find(2); search != example.end())
	      std::cout << "Found " << search->first << ' ' << search->second <<
     '\n';
	  else
	      std::cout << "Not found\n";

	  // C++20 demo: Heterogeneous lookup for unordered  containers  (trans-
     parent hashing)
	  std::unordered_map<std::string,  size_t, string_hash, std::equal_to<>>
     map{{"one"s, 1}};
	  std::cout << std::boolalpha
	      << (map.find("one")   != map.end()) << '\n'
	      << (map.find("one"s)  != map.end()) << '\n'
	      << (map.find("one"sv) != map.end()) << '\n';
      }

Output:
      Found 2 b
      true
      true
      true

See also
	count	    returns the number of elements matching specific key
		    (public member function)
	equal_range returns range of elements matching a specific key
		    (public member function)

http://cppreference.com 	   2024.06.10	     std::unordered_map::find(3)

home | help