Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::hash<std::optional>

      From cppreference.com
      <cpp‎ |utility‎ |optional
       
       
      Utilities library
       
       
      Defined in header<optional>
      template<class T>
      struct hash<std::optional<T>>;
      (since C++17)

      The template specialization ofstd::hash for thestd::optional class allows users to obtain hashes of the values contained inoptional objects.

      The specializationstd::hash<std::optional<T>> is enabled (seestd::hash) ifstd::hash<std::remove_const_t<T>> is enabled, and is disabled otherwise.

      When enabled, for an objecto of typestd::optional<T> that contains a value,std::hash<std::optional<T>>()(o) evaluates to the same value asstd::hash<std::remove_const_t<T>>()(*o). For an optional that does not contain a value, the hash is unspecified.

      The member functions of this specialization are not guaranteed to be noexcept because the hash of the underlying type might throw.

      [edit]Template parameters

      T - the type of the value contained inoptional object

      [edit]Example

      Run this code
      #include <iostream>#include <optional>#include <string>#include <unordered_set> usingnamespace std::literals; int main(){using OptStr=std::optional<std::string>; // hash<optional> makes it possible to use unordered_setstd::unordered_set<OptStr> s={"ABC"s,"abc"s,std::nullopt,"def"s}; for(constauto& o: s)std::cout<< o.value_or("(null)")<<'\t'<<std::hash<OptStr>{}(o)<<'\n';}

      Possible output:

      def     11697390762615875584(null)  18446744073709548283abc     3663726644998027833ABC     11746482041453314842

      [edit]See also

      (C++11)
      hash function object
      (class template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/optional/hash&oldid=171483"

      [8]ページ先頭

      ©2009-2025 Movatter.jp