std::hash<std::experimental::optional> (3) - Linux Manuals

std::hash<std::experimental::optional>: std::hash<std::experimental::optional>


std::hash<std::experimental::optional> - std::hash<std::experimental::optional>


Defined in header <experimental/optional>
template<class T> (library fundamentals TS)
struct hash<std::experimental::optional<T>>;

The template specialization of std::hash for the std::experimental::optional class allows users to obtain hashes of the values contained in optional objects.

Template parameters

T - the type of the value contained in optional object. The specialization std::hash<T> must meet the requirements of class template hash.


// Run this code

  #include <experimental/optional>
  #include <unordered_set>
  #include <string>
  #include <iostream>
  using namespace std::literals;
  int main()
      // hash<optional> makes it possible to use unordered_set
      std::unordered_set<std::experimental::optional<std::string>> s = {
              "abc"s, std::experimental::nullopt, "def"s

      for(const auto& o : s)
          std::cout << o.value_or("(null)") << ' ';

Possible output:

  def abc (null)

See also

hash hash function object
        (class template)